我想在Python中执行以下命令,并将其存储在一个变量中:
ls -1 var1 2>/dev/null | grep var2 | grep var3 | head -n 1
但我不能让它起作用。我试过使用子进程(“call”和“check_output”以及“os.system”),但都没有效果。它总是给我一个错误或错误的输入,而当我在shell中执行这个命令时,它正常工作。
发布于 2016-06-01 08:55:37
为了执行shell命令,您需要使用子进程模块。
用法和示例可在以下网站找到:Python文档:子进程
调用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进行目录搜索。()用于oslistdir的命令可以如下所示
files = [f for f in os.listdir('.') if re.match(r'[0-9]+.*\.jpg', f)]
发布于 2016-06-01 08:41:13
我在使用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
''
您可以在保存输出这里时找到有关调用shell命令的其他信息。
希望能帮上忙。
发布于 2016-06-01 08:41:33
您需要确保在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)
https://stackoverflow.com/questions/37574255
复制