在Python中,执行存储在字符串中的本地Linux命令的最佳方法是什么?

时间:2009-09-08 14:00:49

标签: python

在Python中,执行存储在字符串中的本地Linux命令的最简单方法是什么,同时捕获所引发的任何潜在异常并将Linux命令的输出和任何捕获的错误记录到公共日志文件中?

String logfile = “/dev/log”
String cmd = “ls”
#try
  #execute cmd sending output to >> logfile
#catch sending caught error to >> logfile 

3 个答案:

答案 0 :(得分:16)

使用subprocess模块是正确的方法:

import subprocess
logfile = open("/dev/log", "w")
output, error = subprocess.Popen(
                    ["ls"], stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE).communicate()
logfile.write(output)
logfile.close()

修改 subprocess期望命令作为列表运行“ls -l”,你需要这样做:

output, error = subprocess.Popen(
                    ["ls", "-l"], stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE).communicate()

稍微概括一下。

command = "ls -la"
output, error = subprocess.Popen(
                    command.split(' '), stdout=subprocess.PIPE,
                    stderr=subprocess.PIPE).communicate()

或者您可以这样做,输出将直接转到日志文件,因此在这种情况下输出变量将为空:

import subprocess
logfile = open("/dev/log", "w")
output, error = subprocess.Popen(
                    ["ls"], stdout=logfile,
                    stderr=subprocess.PIPE).communicate()

答案 1 :(得分:0)

subprocess是最好的模块。

您可以通过不同的方式在单独的线程中运行脚本,或者在等待每个命令完成的同一脚本中运行脚本。检查一些非常有用的文档:

http://docs.python.org/library/subprocess.html

答案 2 :(得分:-3)

查看commands模块。

    import commands
    f = open('logfile.log', 'w')
    try:
        exe = 'ls'
        content = commands.getoutput(exe)
        f.write(content)
    except Exception, text:
        f.write(text)
    f.close()

Exception之后将except指定为异常类将告诉Python捕获所有可能的异常。