使用ini文件参数从python运行Windows命令行程序

时间:2013-05-03 23:02:01

标签: python command ini

我试图从python脚本运行一个Windows命令行应用程序,并在命令中使用ini配置文件,我怀疑它在执行时没有通过。

命令为c:\ BLScan \ blscan.exe test.ini。

ini文件是应用程序需要知道要扫描哪些参数的配置文件。

这是使用

的脚本
import subprocess
from subprocess import Popen, PIPE

cmd = '/blscan/blscan test.ini'

p = Popen(cmd , stdout=PIPE, stderr=PIPE)
out, err = p.communicate()
print "Return code: ", p.returncode
print out.rstrip(), err.rstrip()

当我使用subprocess.popen来调用应用程序时,它看起来并不是在读取ini文件。设备行是指示调谐器尚未从ini文件中识别出来的指示符,因此程序将丢弃到默认调谐器。

Return code:  0
BLScan ver.1.1.0.1091-commited
Config name: .\test.ini
Device 0: TBS 6925 DVBS/S2 Tuner
Device number: Total Scan Time = 0.000s
Transponders not found ! 
>>> 

这是从dos shell运行时的外观。

C:\BLScan>blscan test.ini
BLScan ver.1.1.0.1091-commited
Config name: .\test.ini
Scan interval 0
From 3400 to 3430 Mhz, Step 5 Mhz, Horizontal, Minimal SR 1000 KS, Maximal SR 10
0000 KS
3400 Mhz ...
3405 Mhz ...
3410 Mhz ...

任何建议都将不胜感激

3 个答案:

答案 0 :(得分:1)

当您从DOS shell运行时,您当前的工作目录为C:\BLscan,从您显示的提示中可以明显看出:

C:\BLScan>blscan test.ini

您还可以从错误输出中判断出它肯定在当前工作目录中查找。 (例如,某些Windows程序将尝试与可执行文件相同的目录...但您不能指望它,而且这个程序不会。)

Config name: .\test.ini

因此,如果您当前的目录不是C:\BLScan,那么它也无法在DOS shell中运行。试试这个:

C:\BLScan>cd \
C:\>\BLScan\blscan test.ini

您将获得与Python相同的错误。

如果您不能依赖于C:\ BLScan,则必须传递绝对路径。例如,这将再次起作用:

C:\>\BLScan\blscan \BLScan\test.ini

Python与shell没有什么不同。如果你给它一个像test.ini这样的相对路径,它将使用当前的工作目录。所以,你有两个相同的选择:

os.chdir('/blscan')
p = subprocess.popen('blscan test.ini')

...或:

p = subprocess.popen(r'\BLScan\blscan \BLScan\test.ini')

答案 1 :(得分:0)

尝试将参数作为数组传递给subprocess.call: subprocess.call([ “/ blscan / blscan.exe”, “test.ini”])

此外,根据您问题中的命令行与py输出,即使您的“工作目录”不同,也请仔细检查您的blscan.exe工具是否正常工作。也许你需要在blscan.exe所在的同一工作目录中。

os.chdir(“C:\ BLScan”)

答案 2 :(得分:0)

您很可能需要将路径传递给ini以及exe:

clst = [r'C:\blscan\blscan.exe', r'C:\blscan\test.ini']
p = Popen(clst, stdout=PIPE, stderr=PIPE)
# etc . . .

如果您通过Popen列表,它将为您正确引用args。