是否有办法让包含bash命令的Python print语句直接从Python脚本在终端中运行?
在下面的示例中,awk命令打印在终端上。
#!/usr/bin/python
import sys
print "awk 'END{print NF}' file"
我当然可以考虑将print语句写在一个单独的文件中并将该文件作为bash脚本运行,但有没有办法直接从python脚本运行awk命令而不只是打印它?
答案 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
。