如何将 sys.argv 数组传递给 os.system?

How to pass sys.argv array to os.system?

我有两个 Python 文件,名为 file1.pyfile2.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))

首先,我 运行 来自 cmdfile1.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。