Python Script,args没有转移到Script

时间:2011-09-23 14:08:53

标签: python cmd

我有一个名为“gcc_opt.pyw”的Python脚本,我将其目录包含在Windows PATH环境变量中。

但是没有一个命令行参数传递给脚本。打印出来的sys.argv告诉我argv-list中只有文件名。

此命令:

gcc_opt HelloWorld.c -o HelloWorld.exe -shared

结果

["C:\\Scripts\\gcc_opt.pyw"]

你能告诉我为什么没有其他论点吗?

我不知道它是否重要,但是我已经将python.exe设置为执行.pyw文件的默认程序,因为我没有看到使用pythonw.exe的任何打印(为什么会这样)。

2 个答案:

答案 0 :(得分:5)

你没有获得参数的原因是你打破了.py 关联,所以你可以双击这些文件,在NotePad ++中打开它们, 然后打破了.pyw协会来做.py应该做的事情。

简而言之,您忘记在Python.exe命令的末尾包含%* 你的“定制”(受损).pyw协会的行。

ASSOC和FTYPE命令用于显示关联和文件类型,即 运行什么程序来处理具有特定扩展名的文件。这是 这些命令在我的系统上产生了什么:

C:\test>assoc .py
.py=Python.File

C:\test>assoc .pyw
.pyw=Python.NoConFile

C:\test>ftype python.file
python.file="C:\Python27\python.exe" "%1" %*

C:\test>ftype python.noconfile
python.noconfile="C:\Python27\pythonw.exe" "%1" %*

正常的.py关联运行python.exe和控制台窗口,以便你 可以看到print语句的输出。

正常的.pyw关联运行没有控制台窗口的pythonw.exe。

您可以在每个命令行的末尾看到%*。这就是发送的内容 命令的参数。 (实际上,%1是第一个参数,%* 表示“所有剩余参数”。)

当您尝试在命令行运行python文件而不键入它时 扩展或初始“python”命令,发生了一些事情。

首先,PATHEXT环境变量用于查找匹配的扩展名。 在您的情况下,它发现您的命令名称“gcc_opt”+ .PYW导致a 匹配文件。

然后查找.PYW文件的关联,找到文件类型 Python.NoConFile,在你的情况下被设置为“python.exe”(应该是 pythonw.exe)。 (您可以在HKEY_CLASSES_ROOT下的注册表中看到这些。)

系统然后从找到的命令模板创建实际命令行 对于那个文件类型,在你的情况下可能是

"[your-python-path]python.exe" "%1"

这告诉它只使用第一个参数,你的python脚本名称 “gcc_opt.pyw”。

快速解决方法是将%*添加到该命令的末尾。

CORRECT解决方案是将事情恢复到正确的关联和 打开Python文件,通过更标准的方法进行编辑(将图标拖放到 NotePad ++,或者右键单击并使用NotePad ++编辑。)

答案 1 :(得分:2)

您应该将其重命名为.py。

.pyw旨在用于GUI应用程序,因为它们不需要控制台窗口。