命令:
make foo -f $*
从命令行调用时与从python脚本调用时具有不同的功能,如下所示:
import os
os.system(make foo -f $*)
如上所述:http://tldp.org/LDP/abs/html/internalvariables.html#APPREF bat文件中的$ *基本上是所有位置参数,看作单个单词。
Python似乎只是将其解析为“$ *”。反正有没有解决这个问题并复制相同的功能?
我意识到我可以编写一个.bat脚本并用python调用它,但我希望能找到更有说服力的东西。
答案 0 :(得分:1)
正如您所指出的,$ *在python中没有特殊含义。理解完全由您使用的任何外壳完成。如果要将传递给脚本的所有位置参数传递给某个命令,则可以尝试以下
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:])
。输入,例如程序的命令行。因此,更好的选择是使用
@ViewScoped
@Named
public class Navigation implements Serializable {
private List<NavigationItem> navigation = new ArrayList<>();
public List<NavigationItem> getValues() {
if (navigation == null || navigation.size() <= 0) {
NavigationItem navA = new NavigationItem("A", "icon-gauge", "site_a");
{
List<NavigationItem> subNav = new ArrayList<>();
subNav.add(new NavigationItem("1", "", "subsite_1"));
subNav.add(new NavigationItem("2", "", "subsite_2"));
subNav.add(new NavigationItem("3", "", "subsite_3"));
navA.setSubItems(subNav);
}
NavigationItem navB = new NavigationItem("B", "icon-layout", "site_b");
{
List<NavigationItem> subNav = new ArrayList<>();
subNav.add(new NavigationItem("4", "", "subsite_4"));
subNav.add(new NavigationItem("5", "", "subsite_5"));
navB.setSubItems(subNav);
}
NavigationItem navC = new NavigationItem("C", "icon-layout", "site_c");
{
List<NavigationItem> subNav = new ArrayList<>();
subNav.add(new NavigationItem("6", "", "subsite_6"));
navC.setSubItems(subNav);
}
navigation.add(navA);
navigation.add(navB);
navigation.add(navC);
navigation.add(new NavigationItem("Test", "icon-gauge", "site_d"));
}
return navigation;
}
}