如何将输入传递到另一个Python脚本的`sys.argv`列表?

时间:2017-05-29 20:31:49

标签: python python-3.x subprocess argv

我编写了一个Python脚本,可以从命令行调用。我正在编写GUI包装器但不想更改main函数。在GUI代码中,我使用subprocess.run(['./executable.py', input])调用脚本,但输入在executable.py的{​​{1}}列表中不可见。如何传递输入以使其对sys.argv可见?

以下是我保存为sys.argv的测试脚本(使其可执行test.py):

chmod +x test.py

以下是我从命令行调用它时得到的结果:

#!/usr/bin/env python
# script to test using sys.argv with subprocess

import sys

print(sys.argv)

以下是我在python shell中调用它时得到的结果:

$> ./test.py input.txt
['./test.py', 'input.txt']

如何让>>> import subprocess >>> output = subprocess.run(['./test.py', 'input.txt'], shell=True, stdout=subprocess.PIPE) >>> >>> print(output.stdout) b"['./test.py']\n" 显示在input.txt

1 个答案:

答案 0 :(得分:0)

最安全的方法是删除shell=True

>>> import subprocess
>>> output = subprocess.run(['./test.py', 'input.txt'], stdout=subprocess.PIPE)
>>> print(output.stdout)
b"['./test.py', 'input.txt']\n"

另一种选择是将输入列表组合成一个字符串:

>>> import subprocess
>>> output = subprocess.run('./test.py input.txt', shell=True, stdout=subprocess.PIPE)
>>> print(output.stdout)
b"['./test.py', 'input.txt']\n"

我不完全确定为什么原始方法(输入列表和shell=True失败)失败。无论如何,要避免使用running unintended commands/code,最好避免使用shell=Truenote on when you should use shell=True)。