我正在尝试使用.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", " \"\"").
我尝试使用多种方法来获取空字符串,但没有一种方法有效。
答案 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
关键字参数。