我有以下命令,我想在Python中执行并存储在变量中:
ls -1 var1 2>/dev/null | grep var2 | grep var3 | head -n 1
但我无法让它发挥作用。我尝试使用子流程(包括'调用'' check_output'以及' os.system'并且没有任何效果..它总是给我一个错误或错误输入,当我在shell中执行此命令时,它可以正常工作。
答案 0 :(得分:3)
要执行shell命令,您需要使用子进程模块。
用法和示例可在以下位置找到: Python Docs: subprocess
调用bash的实际python代码如下所示
import subprocess
task = subprocess.Popen("ls -1 var1 2>/dev/null | grep var2 | grep var3 | head -n 1",
shell=True,
stdout=subprocess.PIPE)
directory = task.stdout.read()
print(directory) # result
推荐的方法是使用python进行目录搜索。 Python listdir() oslistdir的命令可能如下所示
files = [f for f in os.listdir('.') if re.match(r'[0-9]+.*\.jpg', f)]
答案 1 :(得分:1)
使用subprocess
时我没有任何问题:
>>> import subprocess
>>> sub = subprocess.Popen("ls -1 var1 2>/dev/null | grep var2 | grep var3 | head -n 1", shell=True, stdout=subprocess.PIPE)
>>> str = sub.stdout.read()
>>> str
''
您可以在保存输出here时找到有关调用shell命令的其他信息。
希望它会有所帮助。
答案 2 :(得分:0)
您需要确保在shell中执行,因为您依靠shell来分派管道,例如(PY> 3.1):
import subprocess
var1, var2, var3 = "var1", "var2", "var3"
cmd = "ls -1 {} 2>/dev/null | grep {} | grep {} | head -n 1".format(var1, var2, var3)
result = subprocess.check_output(cmd, shell=True)