我可以在linux中使用以下命令。
ls > >(tee -a a)
但是python os.system不允许使用语法。
>>> import os
>>> os.system("ls > >(tee -a a)") sh: -c: line 0: syntax error near unexpected token `>' sh: -c: line 0: `ls > >(tee -a)' 256
>>>
我们是否需要任何特殊方法来逃避任何角色?
答案 0 :(得分:2)
在评论中提到,os.system
使用/bin/sh
运行命令。即使这是/bin/bash
的链接,当Bash作为/bin/sh
运行时,它也会切换到符合POSIX的模式,其中Bash特定的语法(如您正在运行的命令)不会#&# 39;工作。
一种解决方案是使用:
os.system("/bin/bash -c 'ls > >(tee -a a)'")
这非常重要 - 它使用shell /bin/sh
运行新的shell /bin/bash
来运行所需的命令。如果你真的想这样做,使用包subprocess
中的函数来直接运行Bash会更干净。
在这种情况下,我认为这是一个更简单的解决方案。 "管道"语法:
os.system("ls | tee -a a")
是/bin/sh
兼容的,我认为它会达到你想要做的一样。
正如另一条评论所指出的那样,在纯Python中做这件事并不难:
# Python 3
with open("a", "a") as o:
for f in os.listdir("."):
print(f)
print(f, file=o)
# Python 2
with open("a", "a") as o:
for f in os.listdir("."):
print f
print >>o, f
答案 1 :(得分:1)
os.system将被subprocess取代。这是subprocess.Popen
的解决方案import subprocess
process = subprocess.Popen("ls", stdout=subprocess.PIPE)
stdoutdata, _ = process.communicate()
print stdoutdata
with open ("a", "a") as fle:
fle.write(stdoutdata)