如何将 sys.argv 数组传递给 os.system?
How to pass sys.argv array to os.system?
我有两个 Python 文件,名为 file1.py
和 file2.py
。我运行 file2.py
file1.py
。但是我无法将 file1.py
的所有命令行参数发送到 file2.py
。我尝试 "$@"
传递所有参数但它没有用。
file1.py
就像:
import os
os.system("python file2.py %s" % "$@") #I want to pass all sys.argv with "$@" in here but It did't work
file2.py
就像:
import sys
print ("file2.py ARGS:",(sys.argv))
首先,我 运行 来自 cmd
的 file1.py
以及一些参数,例如:
python file1.py a b c
它提供了这样的输出:file2.py ARGS: ['file2.py', '$@']
但我希望输出应该是这样的:file2.py ARGS: ['file2.py', 'a', 'b', 'c']
那么,如何将 sys.argv
数组传递给 Python 中的 os.system
? (没有数组在 for
循环中迭代)
使用 shlex.quote
生成可以安全传递给子 shell 的字符串:
os.system("python file2.py %s"
% " ".join(map(shlex.quote, sys.argv[1:])))
从 os.system
切换到更强大和更强大的 subprocess
模块的更好选择:
subprocess.call(["python", "file2.py", *sys.argv[1:]])
如果机器人脚本是 python,也许您可以在 file2.py
中创建一个函数来包装其代码,然后从 file1.py
.
导入并执行
这样就可以避免两个脚本之间的系统shell。
我有两个 Python 文件,名为 file1.py
和 file2.py
。我运行 file2.py
file1.py
。但是我无法将 file1.py
的所有命令行参数发送到 file2.py
。我尝试 "$@"
传递所有参数但它没有用。
file1.py
就像:
import os
os.system("python file2.py %s" % "$@") #I want to pass all sys.argv with "$@" in here but It did't work
file2.py
就像:
import sys
print ("file2.py ARGS:",(sys.argv))
首先,我 运行 来自 cmd
的 file1.py
以及一些参数,例如:
python file1.py a b c
它提供了这样的输出:file2.py ARGS: ['file2.py', '$@']
但我希望输出应该是这样的:file2.py ARGS: ['file2.py', 'a', 'b', 'c']
那么,如何将 sys.argv
数组传递给 Python 中的 os.system
? (没有数组在 for
循环中迭代)
使用 shlex.quote
生成可以安全传递给子 shell 的字符串:
os.system("python file2.py %s"
% " ".join(map(shlex.quote, sys.argv[1:])))
从 os.system
切换到更强大和更强大的 subprocess
模块的更好选择:
subprocess.call(["python", "file2.py", *sys.argv[1:]])
如果机器人脚本是 python,也许您可以在 file2.py
中创建一个函数来包装其代码,然后从 file1.py
.
这样就可以避免两个脚本之间的系统shell。