在 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:])
命令:
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:])