我正在尝试获取名为CheckLog
的Windows CLI程序的输出(随Exact Audio Copy
一起提供),我已经搜索了我的问题的解决方案的高低,但我可以' t为我的生命得到输出(返回''
或b''
)。它实际上可以与其他应用程序一起使用(从Microsoft OEM支持工具包中测试nfi
),所以我不知道问题是什么...这是我测试的最新代码:
# -*- coding: utf-8 -*-
import sys, os, subprocess
checklog_path = os.environ['programfiles'] + '\\Exact Audio Copy\\CheckLog.exe'
log_path = 'C:\EAClog.log'
EAC = subprocess.Popen([checklog_path, log_path], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)
EACoutput = EAC.communicate()[0]
我也试过这个:
EACoutput = EAC.stdout.read()
有什么想法吗?我在Windows XP上运行全新安装的Python 3.4(昨晚安装)。
答案 0 :(得分:0)
三点:
1)在Python中,反斜杠是一个“引用”字符 - 这往往会弄乱Windows路径。使用Python原始字符串 - 例如:r"c:\\beer.exe"
2)subprocess.check_output()`是运行命令并获取其输出的最简单,最可靠的方法。
3)在Python中你可以将字符串拼接在一起以获取文件路径,但要正确起来可能很棘手。使用os.path.join()
来简化代码。 Perk:它是跨平台的。
# -*- coding: utf-8 -*-
import sys, os, subprocess
checklog_path = os.path.join(
os.environ['programfiles'],
r'Exact Audio Copy\CheckLog.exe', # no leading backslash
)
log_path = r'C:\EAClog.log'
EACoutput = subprocess.check_output(
[checklog_path, log_path],
stderr=subprocess.STDOUT,
)
答案 1 :(得分:0)
关于从精确音频拷贝中捕获CheckLog.exe
程序输出主题的几点:
1)CheckLog.exe
输出到stdout。
2)在Windows shell中重定向输出也失败:
C:\Program Files (x86)\Exact Audio Copy>CheckLog.exe %logpath%
Log Integrity Checker (C) 2010 by Andre Wiethoff
1. Log entry has no checksum!
C:\Program Files (x86)\Exact Audio Copy>CheckLog.exe %logpath% 1> %temp%\stdout.
txt
C:\Program Files (x86)\Exact Audio Copy>dir %temp%\stdout.txt
Volume in drive C has no label.
Volume Serial Number is 1B3A-F950
Directory of C:\Users\marius\AppData\Local\Temp
04.09.2014 08:35 0 stdout.txt
1 File(s) 0 bytes
0 Dir(s) 171.767.508.992 bytes free
C:\Program Files (x86)\Exact Audio Copy>CheckLog.exe %logpath% 2> %temp%\stderr.
txt
Log Integrity Checker (C) 2010 by Andre Wiethoff
1. Log entry has no checksum!
C:\Program Files (x86)\Exact Audio Copy>CheckLog.exe %logpath% | cat
C:\Program Files (x86)\Exact Audio Copy>echo 'hello world' | cat
'hello world'