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

时间:2013-09-25 07:29:16

标签: python ubuntu terminal subprocess sys

我正在尝试从终端调用python脚本,该脚本本身称为.jar。请注意,此java程序接受一个参数(String)并使用此字符串的内容写入.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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

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

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

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