最佳执行方式' ls' shell命令有多个参数?

时间:2016-06-01 16:34:48

标签: python shell

我有以下命令,我想在Python中执行并存储在变量中:

ls -1 var1 2>/dev/null | grep var2 | grep var3 | head -n 1

但我无法让它发挥作用。我尝试使用子流程(包括'调用'' check_output'以及' os.system'并且没有任何效果..它总是给我一个错误或错误输入,当我在shell中执行此命令时,它可以正常工作。

3 个答案:

答案 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)