我试图在python中运行bash-command,其中bash-command将数据保存到文件而不是显示它。这种命令的一个例子是
$ echo 'foo' > bar.txt
目前我的代码如下所示
process = subprocess.Popen(bashCommand.split(), stdout=subprocess.PIPE)
process.communicate()
当我运行python-code时,不会生成bar.txt
。有关如何从bash脚本保存数据的任何想法?不应仅保存数据。
答案 0 :(得分:0)
使用print()
。就那么简单。由于>
命令,通常打印到控制台的任何内容都将打印到文件中。
~$ python3.5 your_script.py > bar.txt
如果您不想使用>
运行python脚本,则需要使用python的文件操作将数据的字符串版本写入文件:
with open('bar.txt', 'w') as F:
F.write(data)
答案 1 :(得分:0)
默认情况下,subprocess.Popen()
不通过shell运行命令,因此I / O重定向运算符没有特殊含义 - 它们被视为普通参数。实现目标的最简单方法是使用shell。使用Popen()
,您将传递shell=True
,并且不拆分命令字符串:
process = subprocess.Popen(bashCommand, stdout=subprocess.PIPE, shell=True)
您还应该考虑subprocess.call()
(Python 2)或subprocess.run()
(Python 3)便捷功能是否为您带来任何好处。然而,目前尚不清楚他们是否这样做;特别是,在这两种情况下你都需要使用相同的shell
参数。