使用$ *为蟒蛇
该命令使用os.system参数的一部分:
make foo -f $*
已从命令行与当它从一个Python脚本调用调用的时候如下不同的功能:
import os
os.system(make foo -f $*)
如上所述:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF $ *在一个bat文件中基本上是所有位置参数看作一个单词。
Python似乎只是将其解析为“$ *”。无论如何要解决这个问题并复制相同的功能?
我知道我可以写一个.bat脚本,并用python调用它,但我希望能有更多的口才。
正如你所指出的,$ *在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)
改为。
编辑
作为评价建议,每当命令是从“不可信的”输入,内置的程序的命令行,例如一个应避免使用shell=True
。因此更好的选择是使用
import subprocess, sys
subprocess.check_call(['make', 'foo', '-f'] + sys.argv[1:])
请注意,没有理由使用'shell = True'来做到这一点。使用'check_call(['make','foo','-f'] + sys.argv [1:])'你甚至可以摆脱调用'join'的方法。 – Bakuriu
@Bakuriu好点:) –
@Bakuriu打败了我 - 这里没有理由在这里使用shell - 尽可能避免潜在的“有趣”命令滑过 –
忘掉'os.system'。尽可能地使用'subprocess'中的函数和* *尽可能避免*传递'shell = True'。 – Bakuriu