使用sys.argv将命令行参数传递给python脚本

使用sys.argv将命令行参数传递给python脚本,python,batch-file,cmd,Python,Batch File,Cmd,我知道这个问题有各种各样的问题,但似乎没有一个适合我的具体情况: (顺便说一句,所有提到的文件都在我的路径中) 我有一个名为test.py的简单python脚本: import sys print('Hello world!') print(sys.argv) counter = 0 while True: counter +=1 计数器只是用来打开命令窗口的,所以不用担心 我进去的时候 test.py test test 在cmd中,我得到以下输出: Hello world

我知道这个问题有各种各样的问题,但似乎没有一个适合我的具体情况:

(顺便说一句,所有提到的文件都在我的路径中)

我有一个名为test.py的简单python脚本:

import sys

print('Hello world!')
print(sys.argv)

counter = 0

while True:
    counter +=1
计数器只是用来打开命令窗口的,所以不用担心

我进去的时候

test.py test test 
在cmd中,我得到以下输出:

Hello world!
['C:\\Users\\path\\to\\test.py']
由于我不知道的原因,缺少另外两个命令(sys.argv[1]和sys.argv[2])

但是,当我创建这样的.bat文件时:

@C:\Users\path\to\python.exe C:\Users\path\to\test.py %*
在cmd中调用它

test.bat test test
我得到了我想要的输出:

Hello world!
['C:\\Users\\path\\to\\test.py', 'test', 'test']
我读过那本书

%*

在.bat文件中,这意味着所有命令行参数都传递给python脚本,但为什么在cmd中显式调用python脚本时,这些参数没有传递给python脚本呢

从我所读到的内容来看,在脚本名称之后输入的所有命令行参数都应该传递给所述脚本,但由于某些原因,它不能以这种方式工作


我在这里忽略了什么?

我猜您实际上需要使用
C:\Users\path\to\python.exe test.py test
通过命令行运行脚本


我不确定Windows如何处理
test.py test
,但根据我有限的经验,它可能只是试图打开所有3个文件。因为第一个(
test.py
)有一个
.py
扩展,所以它是用Python解释器打开的,并自动运行。其他两个实际上没有作为参数传入。

我猜您需要使用
C:\Users\path\to\python.exe test.py test
通过命令行实际运行脚本


我不确定Windows如何处理
test.py test
,但根据我有限的经验,它可能只是试图打开所有3个文件。因为第一个(
test.py
)有一个
.py
扩展,所以它是用Python解释器打开的,并自动运行。其他两个实际上没有作为参数传入。

C:\Users\path\to\python.exe test.py test
不幸的是,测试不起作用<代码>C:\Users\path\to\python.exe C:\Users\path\to\test.py test但是工作得很好。为什么我最初的操作方式没有通过“test test”作为参数?原始命令不起作用,因为您没有运行
test.py
,使用这两个参数,您告诉windows打开三个名为
test.py
test
test
的文件。只有第一个存在,因此windows会打开它。我猜打开
.py
文件时的默认行为是运行它(在本例中没有参数),我认为这是有意义的。但是,遗憾的是,即使脚本位于path变量中,也必须键入整个路径。您不需要在路径中包含脚本(事实上,不建议这样做)。标准做法是将python可执行文件放入路径中,然后将
cd
放入包含脚本的正确目录中。因此,
cd folder\containing\test.py\file
之后,您可以运行
python test.ty test
。如果您保持CMD打开,那么您只需要在开始时将
cd
放入正确的目录中一次。我刚刚尝试了一下,效果非常好。非常感谢。
C:\Users\path\to\python.exe test.py test
很遗憾,测试失败<代码>C:\Users\path\to\python.exe C:\Users\path\to\test.py test但是工作得很好。为什么我最初的操作方式没有通过“test test”作为参数?原始命令不起作用,因为您没有运行
test.py
,使用这两个参数,您告诉windows打开三个名为
test.py
test
test
的文件。只有第一个存在,因此windows会打开它。我猜打开
.py
文件时的默认行为是运行它(在本例中没有参数),我认为这是有意义的。但是,遗憾的是,即使脚本位于path变量中,也必须键入整个路径。您不需要在路径中包含脚本(事实上,不建议这样做)。标准做法是将python可执行文件放入路径中,然后将
cd
放入包含脚本的正确目录中。因此,
cd folder\containing\test.py\file
之后,您可以运行
python test.ty test
。如果您保持CMD打开,那么您只需要在开始时将
cd
放入正确的目录中一次。我刚刚尝试了一下,效果非常好。非常感谢你。