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.File
和 ftype Python.File="C:\Python27\python.exe" "%1" %*
。
assoc .py=Python.File 由于某种原因没有改变 .py 的关联。刚刚发现 HKEY_CLASSES_ROOT\.py 下的 .py 的值是 py_auto_file 出于某种原因。更改 py_auto_file 中的值可以解决这个问题,谢谢!
HKCR
是HKLM\Software\Classes
(本地机器)和HKCU\Software\Classes
(用户)的合并视图。 HKCU
hive 中的用户设置在合并视图中优先。但是 cmd shell 的assoc
和ftype
命令只编辑HKLM
设置。
是的,py_auto_file
和 pyw_auto_file
是罪魁祸首。我刚刚在一台全新的 Windows 8 机器上安装了 anaconda。设置所有assoc
和ftype
值都不起作用,但是在修复这两个值之后一切都很好。
【参考方案1】:
检查这两台计算机上的 *.py 文件的关联是什么。该脚本可能由不同的 Python 解释器执行。
【讨论】:
我的两台电脑都使用 Anaconda。我已经确保关联是相同的。但这并没有解决问题。 @ZeweiSong,有很多地方可以设置文件类型关联。检查HKLM\Software\Classes
、HKLM\Software\Classes\Applications
和HKLM\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 中起作用