如何在不使用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
>>>
答案 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]);
虽然我很少使用子进程模块,但这可能不是获得所需内容的最佳方式。