Python 脚本在 Windows 中不使用 sys.argv

Posted

技术标签:

【中文标题】Python 脚本在 Windows 中不使用 sys.argv【英文标题】:Python Script does not take sys.argv in Windows 【发布时间】:2015-06-14 22:32:47 【问题描述】:

我有两台装有 Windows 的电脑,我只是在其中一台上发现,如果我直接运行 python 代码,比如:

test_args.py input1 input2

Python 将无法识别我提供的输入,但这有效:

python test_args.py input1 input2

我试过代码:

import sys

print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)

而第一种方式(test_args.py input1 input2)返回:

Number of arguments: 1 arguments.
Argument List: ['D:\\Test\\args\\test_args.py']

虽然第二种方式(python test_args.py input1 input2)返回:

Number of arguments: 3 arguments.
Argument List: ['D:\\Test\\args\\test_args.py', 'input1', 'input2']

知道这会发生什么吗? 此问题仅发生在我的一台计算机上,两台计算机的 Windows 版本相同。

谢谢!

已解决:

我在 regedit 关键字“python”中搜索,发现在“C:\Python27\python.exe”“%1”之后缺少 %* 的两个键:

计算机\HKEY_CLASSES_ROOT\Applications\python.exe

计算机\HKEY_CLASSES_ROOT\py_auto_file\shell\open\command

并且 .py 与 py_auto_file 相关联,即使我尝试了 assoc .py Python.File

更改两个键解决了这个问题,谢谢!

【问题讨论】:

也许你在两者中都安装了不同版本的 python。尝试运行python -V 来确认版本号。 不知何故您丢失了正确的文件关联。 Python 2.7 的默认值为 assoc .py=Python.Fileftype Python.File="C:\Python27\python.exe" "%1" %* assoc .py=Python.File 由于某种原因没有改变 .py 的关联。刚刚发现 HKEY_CLASSES_ROOT\.py 下的 .py 的值是 py_auto_file 出于某种原因。更改 py_auto_file 中的值可以解决这个问题,谢谢! HKCRHKLM\Software\Classes(本地机器)和HKCU\Software\Classes(用户)的合并视图。 HKCU hive 中的用户设置在合并视图中优先。但是 cmd shell 的assocftype 命令只编辑HKLM 设置。 是的,py_auto_filepyw_auto_file 是罪魁祸首。我刚刚在一台全新的 Windows 8 机器上安装了 anaconda。设置所有assocftype 值都不起作用,但是在修复这两个值之后一切都很好。 【参考方案1】:

检查这两台计算机上的 *.py 文件的关联是什么。该脚本可能由不同的 Python 解释器执行。

【讨论】:

我的两台电脑都使用 Anaconda。我已经确保关联是相同的。但这并没有解决问题。 @ZeweiSong,有很多地方可以设置文件类型关联。检查HKLM\Software\ClassesHKLM\Software\Classes\ApplicationsHKLM\Software\RegisteredApplications,以及每个用户HKCU 配置单元下的相同子项。另请检查HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts。参考File Types and File Associations。 @eryksun 我发现两个键缺少 %*,猜测是 sys 输入 @ZeweiSong,"%1" 是脚本路径,%* 是其余参数。

以上是关于Python 脚本在 Windows 中不使用 sys.argv的主要内容,如果未能解决你的问题,请参考以下文章

串行 AT 命令在 python 脚本中不起作用,但在 Minicom 中起作用

当 for 循环中不匹配时退出 python 脚本

BigQuery - use_avro_logical_types 在 python 脚本中不起作用

在Windows上通过命令窗口运行Python脚本程序

在Windows上通过命令窗口运行Python脚本程序

大多数 cv2 元组参数在 python 3.5(windows 7)中不起作用