Python - 解析以下命令行参数时......
sys.argv = ('%s %s build_ext --inplace' % ('python', sys.argv[0]))
...对于使用“myscript.py”文件的“myscript.pyd”我的buildscript“myscript_pyd_setup.py”中的Cython我收到以下错误(e1):
python错误1:无效命令'y'
python command-line option python -- help
没有显示相应的选项'y'。这是有道理的,否则错误将不存在。搜索SO,Python文档和网络导致了与Tkinter
无关的文章。因为我对Tkinter一无所知,据我所知,我想知道这个错误是否来自python命令行解释器?
我的努力:
我试图完成的是在编辑器(Komodo edit 11.x)中运行“buildscript”时将参数sys.argv.append('build_ext --inplace')
解析为python命令行解释器,但它也返回错误(e2)类似从命令行或其他编辑器的版本。
python错误2:无效的命令名称'build_ext --inplace'
使用sys.argv.append('build_ext')
运行“myscript_pyd_setup.py”可以很好地构建所需的* .pyd文件。我不明白的是为什么它会在--infile
上窒息。这适用于py2exe
和pyinstaller
。
目标:
从编辑器中运行“myscript.py”的setup脚本,而不必来回转换到命令行编辑器以编译* .py> * .pyd当我在“myscript.py”中更改代码并希望快速查看结果时。
注意:解析命令行
python myscript_pyd_setup.py build_ext --inplace
在“buildscript”中注释掉sys.argv...
时工作正常!
第三个选项是在“myscript.py”和“myscript.pyd”文件的组合中使用cythonize
但是显示“myscript.pyd”的副本文件错误。相关但不是上面提到的“错误= y”问题。
任何有关如何自动化此部件以防止RSI的想法和帮助都非常受欢迎! THX。
我的“myscript.py”示例代码:
import sys, time, os
#...snippet...
def print_me():
text = "bar(man), yes, Hello, how do you do Mr. foo?"
return text
if __name__ == '__main__':
#...snippet...
print_me()
myscript_pyd_setup.py:
# myscript.py
try:
from setuptools import setup
from setuptools import Extension
except ImportError:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
#from Cython.Build import cythonize
import sys
print 'sys.argv[0] : %s' % sys.argv[0]
#sys.argv = ('%s %s build_ext --inplace' % ('python', sys.argv[0]))
sys.argv.append('build_ext --inplace')
ext_modules = [Extension("myscript",['myscript.py'])]
#ext_modules = cythonize("myscript.py")
#setup: "name" and "cmdclass" are commented-out when using cythonize.
setup(
name= 'XYZ model class',
cmdclass = {'build_ext': build_ext},
include_dirs = [],
ext_modules = ext_modules)
答案 0 :(得分:2)
sys.argv
是一个参数列表。当你附加'build_ext --inplace'
时,你实际上将它作为单个参数附加(就好像你已经将它包含在shell命令行的引号中)。这就是第二种情况。
在第一个中,您已将字符串分配回sys.argv
。但字符串也是一个序列,因此您的命令就像调用(argv[1:]
)一样运行:['y', 't', `h`, ...]
在任何一种情况下,你都会得到一个未知参数解析器的选项/子命令。