1

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

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

pdv -t filename

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

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

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

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

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

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

任何帮助将不胜感激!

4

6 回答 6

8

您可以使用带有 stdout 关键字参数的 subprocess.call:

import subprocess

cmd = ['ls', '-l']

with open('output.txt', 'w') as out:
    return_code = subprocess.call(cmd, stdout=out)
于 2012-09-06T05:28:33.090 回答
4

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

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

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

于 2012-09-06T03:50:49.343 回答
4

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

import subprocess
subprocess.call(['pdv', '-t', filename, '>', dest_file_name])
于 2012-09-06T05:18:59.780 回答
3
from subprocess import Popen
proc = Popen(['pdv', '-t', epoch_name], stdout = open('123.txt', 'w'))
于 2012-09-06T05:26:47.123 回答
1

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

于 2012-09-06T03:36:30.207 回答
0

或者,如果对您有帮助,您可以使用DiveIntoPythonsys.stdout中的查看此文档或此处的讨论。

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()
于 2015-01-26T10:27:49.843 回答