在Python中使用Subprocess附加到文件

时间:2015-06-19 01:35:24

标签: python

如何在不使用Linux echo命令打开文件的情况下附加到文件?我已经尝试了各种可能性但无法实现结果。我不确定我错过了什么。

当shell设置为'True'时,文档说明要输入确切的命令(有安全风险的是)。当我在Linux终端中输入但不通过子进程输入时,echo命令有效。我没有看到“这是一个测试字符串”的“test.txt”。

>>> string = 'This is a test string.'    
>>> cmd = 'echo \"' + string + '\" >> test.txt'
>>> cmd
'echo "This is a test string." >> test.txt'
>>> 
>>> subprocess.check_call (cmd, shell = True)
0
>>> 
>>> subprocess.call (['echo', '\"', string, '\"', ' >> ', ' test.txt'])
0
>>> 

2 个答案:

答案 0 :(得分:1)

正如this answer中所讨论的,当使用shell=True时,您应该传递一个字符串而不是列表作为第一个参数。因此,正确的代码将是:

subprocess.call('echo "foo" >> bar.txt', shell=True)

演示:

>>> import subprocess
>>> subprocess.call('echo "foo" >> /tmp/bar.txt', shell=True)
0
>>> open('/tmp/bar.txt').read()
'foo\n'
>>>

答案 1 :(得分:-1)

您正在传递重定向器“>>”作为回声的参数,但它不是一个参数,它是shell的一部分。您需要使用命令的字符串运行shell。该字符串将是您的cmd变量中的内容。想到的直接选择是:

subprocess.call(["sh", "-c", cmd]);

虽然我很少使用子进程模块,但这可能不是获得所需内容的最佳方式。