无法将sys.argv [0]传递给subprocess.call

问题描述 投票:0回答:2

我正在尝试从本身称为python的终端调用.jar脚本。请注意,此Java程序接受一个参数(字符串),并使用此字符串的内容写入.txt文件。

我试图去(在test.py中:

#!/usr/bin/python

import sys
import subprocess

subprocess.call(['java','-jar',sys.argv[0],sys.argv[1]])

然后在终端中输入:

python test.py test.jar Hello

但是,出现错误Invalid or corrupt jarfile test.jar。有趣的是,下面的方法可以工作:

#!/usr/bin/python

import sys
import subprocess

subprocess.call(['java','-jar','test.jar',sys.argv[0]])

其次:

python test.py Hello
python ubuntu terminal subprocess sys
2个回答
3
投票

sys.argv[0]实际上是Python文件的名称,因为它是您在python之后输入的第一个参数。因此,在通话中,您想使用sys.argv[1]sys.argv[2]

我的test.py

import sys
print(sys.argv[0])

正在运行test.py

marius@devils-creek ~ 💀  python test.py
# Output 
test.py

0
投票

sys.argv [0] -sys.argv []列表从sys.argv [1]开始!由于sys.code位于sys.argv [0]中,因此无法使用。

您也可以使用;导入argparse您可以获得一些额外的帮助功能,而无需添加错误函数sys.argv [1] == 1

另请参见:https://pythonprogramming.net/argparse-cli-intermediate-python-tutorial/

© www.soinside.com 2019 - 2024. All rights reserved.