运行包含bash命令的Python print语句

时间:2017-05-28 12:00:05

标签: python bash

是否有办法让包含bash命令的Python print语句直接从Python脚本在终端中运行?

在下面的示例中,awk命令打印在终端上。

#!/usr/bin/python
import sys

print "awk 'END{print NF}' file"

我当然可以考虑将print语句写在一个单独的文件中并将该文件作为bash脚本运行,但有没有办法直接从python脚本运行awk命令而不只是打印它?

3 个答案:

答案 0 :(得分:2)

  

有没有办法直接从python脚本运行awk命令而不只是打印它?

是的,您可以使用subprocess模块。

import subprocess
subprocess.call(["ls", "-l"])

答案 1 :(得分:1)

您可以将Python输出传输到Bash进程,例如,

python -c "print 'echo 5'" | bash

将输出

5

如果你愿意,你甚至可以使用subprocess模块从Python内部执行此操作。

但我相信这是一个非常糟糕的设计,并不是一个好主意。如果您的编码错误,那么您可能会允许恶意用户在运行代码的计算机上执行任意命令。

答案 2 :(得分:1)

一种解决方案是使用subprocess运行shell command并捕获其输出,例如:

import subprocess

command = "awk 'END{print NF}' file"
p = subprocess.Popen([command], shell=True, bufsize=2000,
    stdin=subprocess.PIPE, stdout=subprocess.PIPE, close_fds=True)
(child_stdout, child_stdin) = (p.stdout, p.stdin)
print(''.join([line for line in child_stdout]))

child_stdout.close()
p.stdout.close()

根据bufsize的尺寸相应调整file