在python 3.5中,当使用参数列表作为subprocess.Popen()的输入时,我无法获得正确的len(sys.argv)

在python 3.5中,当使用参数列表作为subprocess.Popen()的输入时,我无法获得正确的len(sys.argv),python,windows,python-3.x,subprocess,sequence,Python,Windows,Python 3.x,Subprocess,Sequence,在实验_script.py中,我使用一个列表作为subprocess.Popen()的输入 在.\modified_easy.py中,检查参数的数量: if len(sys.argv) <= 1: print('Usage: {0} training_file [testing_file]'.format(sys.argv[0])) raise SystemExit if len(sys.argv)感谢@eryksun和@J.F.Sebastian。我做了一些试验,发现l

在实验_script.py中,我使用一个列表作为
subprocess.Popen()
的输入

在.\modified_easy.py中,检查参数的数量:

if len(sys.argv) <= 1:
    print('Usage: {0} training_file [testing_file]'.format(sys.argv[0]))
    raise SystemExit

if len(sys.argv)感谢@eryksun和@J.F.Sebastian。我做了一些试验,发现
len(sys.argv)
无法按预期工作

正如@eryksun所说

从列表中选择“Python”(在
py
launcher图标中有火箭)并“始终”使用此应用程序。不要“寻找另一个应用”,因为选择一个可执行文件会直接创建一个不接受命令行参数的新ProgId

当使用
子流程在另一个脚本中运行python脚本时,如果未指定
python
关键字或
sys.executable
,操作系统将根据一些文件关联打开
.py
文件。如果操作系统默认使用python启动程序py.exe打开.py文件,那么就可以了。如果操作系统使用
python.exe
打开.py文件,则
len(sys.argv)
将失败

以前,我在计算机中安装了Anaconda,但没有py.exe。因此,当“打开方式”对话框询问时,我选择了python.exe。因此len(sys.argv)失败


要解决这个问题,我可以添加
python
关键字,或者使用
py.exe打开操作系统的.py文件,我很困惑。我在2台计算机上安装了2台Python 3.3.2。实验_script.py在一台计算机上工作,但在另一台计算机上失败。尝试在
cmd
的开头添加
'python'
,比如
cmd=['python','。\modified_easy.py',…]
@acw1668我添加了
'python'
,最后
len(sys.argv)
变为3。非常感谢你。但原因是什么?因为我调用python脚本时有很多地方没有使用“python”关键字。还有其他更简单的解决方案吗?我以前在另一个脚本中调用了python脚本,但没有使用“python”关键字,它成功了。添加“python”关键字是新标准吗?对不起,我发现它与python版本无关。这是关于python的发行版。在调用没有关键字“python”的python脚本时,
len(sys.argv)
在Anaconda或WinPython上给出错误的结果,即1。但是,官方python发行版给出了正确的结果,即3。
if len(sys.argv) <= 1:
    print('Usage: {0} training_file [testing_file]'.format(sys.argv[0]))
    raise SystemExit