使用中的参数运行python函数命令行

2024-09-30 01:31:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个Python函数,它接受1个参数

def build_ibs(Nthreads,LibCfg):  # Nthreads is int,LibCfg as string
      import os  # module os must be imported
      import subprocess
      import sys

我用跟在后面命令提示符(在Win7上)调用它

C:>cd C:\SVN\Python Code
C:\SVN\Python Code>C:\Python27\python.exe build_libs(4,'Release') 

抛出错误
enter image description here 使用下列

 C:>cd C:\SVN\Python Code
 C:\SVN\Python Code>C:\Python27\python.exe 4 'Release' # dosn't work
 C:\SVN\Python Code>C:\Python27\python.exe 4 Release   # dosn't work

不执行任何操作,甚至不显示错误。你知道吗

什么是正确的方式来称呼两者命令行甚至是pythonshell命令行?
谢谢

赛迪


Tags: 命令行importbuildreleaseos错误cdcode
2条回答
  1. 如果要像第一次尝试那样使用Python代码,则需要启动Python解释器。你知道吗
  2. 如果要像第二次尝试那样从操作系统的命令行调用Python函数,则需要使用适当的模块(如sys.argvargparse)。你知道吗

例如:

C:\SVN\Python Code> py
Python 3.4.2 (v3.4.2:ab2c023a9432, Oct  6 2014, 22:16:31) [MSC v.1600 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import build_libs
>>> build_libs.build_libs(4, 'Release')

或者,在build_libs.py中,导入脚本顶部的sys模块,然后根据脚本末尾的参数运行函数:

import sys

...

print(build_libs(int(sys.argv[1]), sys.argv[2]))

然后在操作系统的命令行:

C:\SVN\Python Code> py build_libs 4 Release

不能只从命令行调用函数-它必须在文件中。在命令行中键入python filename.py时,它所做的是将filename.py的内容输入到Python解释器中,名称空间设置为__main__。你知道吗

因此,当您键入Python.exe 4 'Release'时,它会尝试查找名为4的文件。由于此文件不存在,Windows返回一个错误2-找不到文件。你知道吗

相反,把你的代码放进一个文件中——比如说测试.py

测试.py

def build_libs(Nthreads,LibCfg):  # Nthreads is int,LibCfg as string
      import os  # module os must be imported
      import subprocess
      import sys
      # ...

if __name__=='__main__':
    numthreads = sys.argv[1] # first argument to script - 4
    libconfig = sys.argv[2] # second argument
    # call build_libs however you planned
    build_libs(numthreads, libconfig)

然后从命令行运行: C:\Python27\python.exe test.py 4 Release 在那个目录里测试.py已保存在中。你知道吗

更新:如果需要在多个文件中使用build_libs,最好在模块中定义它,然后导入它。例如:

mod \u libs/\uu init \uuuuu.py-空文件

模型库/核心.py:

def build_libs(...):
    ....
    # function definition goes here

测试.py

import sys
import mod_libs
if __name__ == '__main__':
    mod_libs.build_libs(sys.argv[1], sys.argv[2])

相关问题 更多 >

    热门问题