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



我有一个我写的python脚本是从命令行中调用的。我正在编写GUI包装器,但不想更改主要功能。在GUI代码中,我使用subprocess.run(['./executable.py', input])调用脚本,但是在executable.pysys.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)

这是我从命令行调用它时得到的:

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

这是我从python shell中调用它的东西:

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

如何让input.txt出现在sys.argv

最安全的方法就是简单地删除 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失败的列表(失败。无论如何,要避免运行意外命令/代码,最好避免使用shell=True(请注意何时使用shell=True(。

最新更新