python cmd错误:命令'y'无效

时间:2018-02-02 14:27:26

标签: python python-2.7 command-line cython sys

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上窒息。这适用于py2exepyinstaller

目标:

从编辑器中运行“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)

1 个答案:

答案 0 :(得分:2)

sys.argv是一个参数列表。当你附加'build_ext --inplace'时,你实际上将它作为单个参数附加(就好像你已经将它包含在shell命令行的引号中)。这就是第二种情况。

在第一个中,您已将字符串分配回sys.argv。但字符串也是一个序列,因此您的命令就像调用(argv[1:])一样运行:['y', 't', `h`, ...]

在任何一种情况下,你都会得到一个未知参数解析器的选项/子命令。