python子进程和空字符串

时间:2015-02-14 06:22:11

标签: python subprocess string

我正在尝试使用.subprocess.check_output()函数向加密硬币钱包(比如比特币,但不是)发出命令。有些命令效果很好,但是没有返回正确的结果。我怀疑使用空字符串("")是问题,但需要帮助找到解决方案。

我在Raspberry Pi B +上使用Python 2.7。 我的代码是:

import subprocess
command = 'rimbitd getaddressesbyaccount ""'
print "The command is: ", command
results = subprocess.check_output(command.split())
print "The Results are: ", results

我的输出是:

pi@Pi ~ $ python Demo2.py
The command is:  rimbitd getaddressesbyaccount ""
The Results are:  [
]

显然,结果是一组空的括号。但是,如果我直接使用完全相同的命令(在$ prompt),通过复制/粘贴rimbitd getaddressesbyaccount""从输出(即"命令是:...")然后我得到以下(正确)输出:

pi@Pi ~ $ rimbitd getaddressesbyaccount ""
[
    "RPSXNdNu4TsfyrytMSFz5RvxeSqrRyQMg6",
    "RGyFKcrYR6NGr82Gqsjamj9DgEj7ZBUyfM",
    "RLwQ9XGPesV35KK84oUupUh62tNori9Ahe",
    "RQ2HRzX3U9NGP14dLAM7TPagNPhYKbTaVM",
    "RNvR2vvaWmUnij88tTiGTXFLgZU1daKVvz"
]
pi@Pi ~ $ 

其他命令按照描述工作(发送硬币,检查余额等)。我只是不能让这个工作,唯一的区别是非工作命令需要发送一个空字符串。我尝试过使用n =""然后连接:命令+ n(没有快乐)。我尝试过使用:

results = subprocess.check_output("rimbitd", "getaddressesbyaccount", " \"\"").

我尝试使用多种方法来获取空字符串,但没有一种方法有效。

1 个答案:

答案 0 :(得分:2)

拆分'rimbitd getaddressesbyaccount ""'并没有给你一个空的第三个参数;它为您提供了一个由两个引号组成的参数:

>>> 'rimbitd getaddressesbyaccount ""'.split()
['rimbitd', 'getaddressesbyaccount', '""']

您想要使用

['rimbitd', 'getaddressesbyaccount', '']

如果最后一个参数需要为空(从shell提示符调用时你将使用一对双引号)。

正如J.F.Sebastian指出的那样,你也可以使用shlex模块:

>>> import shlex
>>> shlex.split('rimbitd getaddressesbyaccount ""')
['rimbitd', 'getaddressesbyaccount', '']
默认情况下,

subprocess.check_output()不会在shell中运行命令。您也可以使用原始.split()并向check_output()提供shell=True关键字参数。