【问题标题】:writing terminal output to file将终端输出写入文件
【发布时间】:2012-09-06 03:31:55
【问题描述】:

在我的机器上,我有一些软件可以在终端中接收命令并返回一个值列表。

要运行它,我必须输入如下内容:

pdv -t filename

我正在尝试将它作为 python 程序的一部分运行。当我运行以下命令时:

os.system('pdv -t %s' % (epoch_name))

然后我得到我希望返回到我的终端的值(其中 epoch_name 是文件名的变量名)。但是当我尝试将结果写入文件时:

os.system('pdv -t %s % "(epoch_name)" > 123.txt')

文件 123.txt 已生成,但它是空的。

我知道我放错了 " 和/或 ' 字符,但我不知道它们应该放在哪里。

任何帮助将不胜感激!

【问题讨论】:

    标签: python os.system


    【解决方案1】:

    您可以将 subprocess.call 与 stdout 关键字参数一起使用:

    import subprocess
    
    cmd = ['ls', '-l']
    
    with open('output.txt', 'w') as out:
        return_code = subprocess.call(cmd, stdout=out)
    

    【讨论】:

    【解决方案2】:

    我相信这可以满足您的需求。 os.system() 的参数应该是表示操作系统命令的字符串。

    os.system('pdv -t %s > 123.txt' % epoch_name)
    

    subprocess 模块,如果您打算在 python 中进一步处理输出,可能值得研究。

    【讨论】:

      【解决方案3】:

      最好使用os.system的子进程模块

      import subprocess
      subprocess.call(['pdv', '-t', filename, '>', dest_file_name])
      

      【讨论】:

        【解决方案4】:
        from subprocess import Popen
        proc = Popen(['pdv', '-t', epoch_name], stdout = open('123.txt', 'w'))
        

        【讨论】:

          【解决方案5】:

          查看命令script 是否对您可用。它可能会满足您的需求。

          【讨论】:

          • 这是一个unix/linux系统命令,旨在捕获程序的控制台输出。
          • 我没有轻易接触到苹果。打开终端并输入man script,看看会发生什么。
          【解决方案6】:

          或者你可以使用sys.stdoutDiveIntoPython查看这个文档或者讨论here如果对你有帮助的话。

          import sys
          
          print 'Dive in'
          saveout = sys.stdout
          fsock = open('out.log', 'w')
          sys.stdout = fsock
          print 'This message will be logged instead of displayed'
          sys.stdout = saveout
          fsock.close()
          

          【讨论】:

            猜你喜欢
            • 2013-07-02
            • 1970-01-01
            • 1970-01-01
            • 2017-07-07
            • 2022-10-08
            • 1970-01-01
            • 2014-12-21
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多