开发者

Help with wrapping a command line tool in Python

I'm really stuck with a problem I'm hoping someone can help me with. I'm trying to create a wrapper in Python3.1 for a command line program called spooky. I can successfully run this program on the command line like this:

$ spooky -a 4 -b .97

My first Python wrapper attempt for spooky looked like this:

import subprocess

start = "4"
end = ".97"

spooky_path = '/Users/path/to/spooky'
cmd = [spooky_path, '-a', start, '-b', e开发者_StackOverflow中文版nd]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
process.wait()
print('Done')

The above code prints Done, but does not execute the program spooky

Next I tried to just execute the program on the command line like this:

$ /Users/path/to/spooky -a 4 -b .97

The above code also fails, and provides no helpful errors.

My question is: How can I get Python to run this program by sending spooky -a 4 -b .97 to the command line? I would VERY much appreciate any help you can provide. Thanks in advance.


You need to drop the stdout=subprocess.PIPE. Doing that disconnects the stdout of your process from Python's stdout and makes it retrievable using the Popen.communicate() function, like so:

import subprocess

spooky_path = 'ls'
cmd = [spooky_path, '-l']
process = subprocess.Popen(cmd, stdout=subprocess.PIPE)
output = process.communicate()[0]
print "Output:", output
process.wait()
print('Done')

To make it print directly you can use it without the stdout argument:

process = subprocess.Popen(cmd)

Or you can use the call function:

process = subprocess.call(cmd)


Try making your command into a single string:

cmd = 'spooky_path -a start -b end'
process = subprocess.Popen(cmd, shell=True)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜