你如何回应"使用python' s os.system()引用?

时间:2015-03-26 18:56:30

标签: python bash python-2.7

我试图使用标准的bash脚本编写一个monit配置文件,如果是python' s os.system(),这个字符串是我想模仿的。

echo -e "\t" start program = \""/etc/init.d/snortd00 start\"" >> /etc/monit.d/ips_svcs.monit

以下是我使用os.system()的尝试。它们都产生相同的结果。其中没有一个在/etc/init.d/snortd00 start

附近写引号
   os.system('echo -e \"\t\" start program = \""/etc/init.d/snortd00 start\"" >> /etc/monit.d/ips_svcs.monit')

   os.system('echo -e \"\t\" start program = \"\"/etc/init.d/snortd00 start\"\" >> /etc/monit.d/ips_svcs.monit')

   os.system('echo -e \"\t\" start program = "/etc/init.d/snortd00 start" >> /etc/monit.d/ips_svcs.monit')

   os.system('echo -e \"\t\" start program = "\"/etc/init.d/snortd00 start\"" >> /etc/monit.d/ips_svcs.monit')

这是使用所有四个os.system()声明编写的内容。 start program = /etc/init.d/snortd00 start

我正在寻找start program = "/etc/init.d/snortd00 start"

2 个答案:

答案 0 :(得分:6)

只需使用原始字符串以避免双重转义(一次用于python,一次用于shell):

cmd = r'echo -e "\t" start program = \""/etc/init.d/snortd00 start\"" >> /etc/monit.d/ips_svcs.monit'
os.system(cmd)

正如三人在评论中指出的os.system is being replaced by subprocess,所以上面的代码会改为:

subprocess.call(cmd, shell=True)

更好的是,只需使用python:

with open("/etc/monit.d/ips_svcs.monit", "a") as file:
    file.write('\t  start program = "/etc/init.d/snortd00 start"\n')

答案 1 :(得分:4)

让我们考虑一下您现有方法无效的原因:

在这种情况下,\由Python处理,因此shell连续两次获得"字符。 shell看到""/etc...""

os.system('echo -e \"\t\" start program = \""/etc/init.d/snortd00 start\"" >> /etc/monit.d/ips_svcs.monit')

这与上一个相同:\由Python处理:

os.system('echo -e \"\t\" start program = \"\"/etc/init.d/snortd00 start\"\" >> /etc/monit.d/ips_svcs.monit')

在这种情况下,shell会看到" / etc ...":

os.system('echo -e \"\t\" start program = "/etc/init.d/snortd00 start" >> /etc/monit.d/ips_svcs.monit')

在这种情况下,Python处理\并且shell看到""/etc...""

os.system('echo -e \"\t\" start program = "\"/etc/init.d/snortd00 start\"" >> /etc/monit.d/ips_svcs.monit')

现在,你想要的是什么:

os.system('echo -e \"\t\" start program = \\"/etc/init.d/snortd00 start\\" >> /etc/monit.d/ips_svcs.monit')

这里,Python将\\处理为\,Shell看到\",它会调用shell的转义机制,以便echo真正看到"