在 python 中使用 $* 作为 os.system 的参数的一部分

Using $* as part of a parameter for os.system in python

命令:

make foo -f $*

从命令行调用与从 python 脚本调用时具有不同的功能,如下所示:

import os
os.system(make foo -f $*)

如此处所述:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF bat 文件中的 $* 基本上是所有被视为单个单词的位置参数。

Python 似乎将其解析为简单的“$*”。有没有办法解决这个问题并复制相同的功能?

我意识到我可以编写一个 .bat 脚本并使用 python 调用它,但我希望得到更多 eloquent。

正如您所指出的,$* 在 python 中没有特殊含义。理解完全由您使用的 shell 完成。如果你想将传递给脚本的所有位置参数传递给某个命令,那么你可以尝试以下

import os, sys
os.system("make foo -f {}".format(" ".join(sys.argv[1:])))

但请注意,os.system 已弃用。您可能应该使用

import subprocess, sys
subprocess.check_call("make foo -f {}".format(" ".join(sys.argv[1:])), shell=True)

相反。

编辑

正如评论中所建议的,无论何时从 "untrusted" 输入(例如程序的命令行)构建命令时,都应避免使用 shell=True。因此,更好的选择是使用

import subprocess, sys
subprocess.check_call(['make', 'foo', '-f'] + sys.argv[1:])