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

python cmd错误:无效命令';y';,python,python-2.7,command-line,cython,sys,Python,Python 2.7,Command Line,Cython,Sys,Python-解析以下命令行参数时 sys.argv=(“%s%s内部版本”\u ext--in place“%”('python',sys.argv[0])) …对于使用“myscript.py”文件的“myscript.pyd”的构建脚本“myscript\u pyd\u setup.py”中的Cython,我得到以下错误(e1): python错误1:无效的命令“y” pythonpython--help没有显示相应的选项“y”。这是有意义的,否则错误将不存在。因此,Python文档和we

Python-解析以下命令行参数时

sys.argv=(“%s%s内部版本”\u ext--in place“%”('python',sys.argv[0]))

…对于使用“myscript.py”文件的“myscript.pyd”的构建脚本“myscript\u pyd\u setup.py”中的Cython,我得到以下错误(e1):

python错误1:无效的命令“y”

python
python--help
没有显示相应的选项“y”。这是有意义的,否则错误将不存在。因此,Python文档和web搜索结果是关于
Tkinter
的无关文章。就我所知,我完全不使用Tkinter,我想知道这个错误是否来自python命令行解释器

我的努力:

我试图完成的是在编辑器(Komodo edit 11.x)中运行“buildscript”时,将参数
sys.argv.append('build_ext--inplace')
解析到python命令行解释器,但返回的错误(e2)与命令行或其他编辑器的版本类似

python错误2:无效的命令名“build\u ext--inplace”

使用
sys.argv.append('build\u ext')
运行“myscript\u pyd\u setup.py”可以很好地构建所需的*.pyd文件。我不明白的是为什么它会被
--infle
阻塞。这适用于
py2exe
pyinstaller

目标是:

在编辑器中运行“myscript.py”的安装脚本,而不必在“myscript.py”中更改代码并希望快速查看结果时来回切换到命令行编辑器来编译*.py>*.pyd

注意:解析命令行
python myscript\u pyd\u setup.py build\u ext--inplace
在“buildscript”中注释掉sys.argv…时工作正常

第三个选项是在“myscript.py”和“myscript.pyd”文件的组合中使用
cythonize
,但显示了“myscript.pyd”的copyfile错误。与上述“错误=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)

sys.argv
是参数列表。当您附加
'build\u ext--inplace'
时,您可以直接将其作为单个参数附加(就好像您从shell命令行传递了包含在引号中的参数)。第二个案例就是这样

在第一个示例中,您已将字符串重新分配给
sys.argv
。但是字符串也是一个序列,所以您的命令运行时就像用(
argv[1://code>):
['y','t','h',…]调用一样。


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

sys.argv
是参数列表。当您附加
'build\u ext--inplace'
时,您可以直接将其作为单个参数附加(就好像您从shell命令行传递了包含在引号中的参数)。第二个案例就是这样

在第一个示例中,您已将字符串重新分配给
sys.argv
。但是字符串也是一个序列,所以您的命令运行时就像用(
argv[1://code>):
['y','t','h',…]调用一样。


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

如果我理解正确,它应该是
sys.argv.append('build','--inplace')
命令?因为如果它的第一个
'build'
后跟第二个append
'--inplace'
,第一个命令将在没有后者的情况下执行……实际上:
sys.argv.append('build');sys.argv.append('--inplace')
sys.argv.extend('build','--inplace'))
sys.argv.append('build','--inplace')
根本不起作用,因为
append
方法接受单个参数并附加单个项。一个通用注释。我希望这些证明对你的进步有用,但它只解决了你眼前的问题。我对
sys.argv
操作不太感兴趣,因为它是运行环境的一个全局属性,这样做违反了接口/对象封装(它不整洁,可能会导致麻烦)。不幸的是,我对
distutils
还不够熟悉,无法给你下注后的正确答案,但我鼓励你四处看看,看看如何传递自己的一组参数来代替使用
sys.argv
argparse
例如允许相同的参数)。为此干杯。。。我会调查的。当我讲完后,我会告诉你我是如何解决的。如果我理解正确,应该是
sys.argv.append('build','--inplace')
命令?因为如果它的第一个
'build'
后跟第二个append
'--inplace'
,第一个命令将在没有后者的情况下执行……实际上:
sys.argv.append('build');sys.argv.append('--inplace')
sys.argv.extend('build','--inplace'))
sys.argv.append('build','--inplace')
根本不起作用,因为
append
方法接受单个参数并附加单个项。一个通用注释。我希望这些证明对你的进步有用,但它只解决了你眼前的问题。我对
sys.argv
操作不太感兴趣,因为它是运行环境的一个全局属性,这样做违反了接口/对象封装(它不整洁,可能会导致麻烦)。不幸的是,我对
distutils
还不够熟悉,无法给你下注后的正确答案,但我鼓励你四处看看,看看如何传递自己的一组参数来代替使用
sys.argv
argparse
例如允许相同的参数)。为此干杯。。。我会调查的。等我办妥了,我会告诉你我是怎么办到的