python 子进程和空字符串

python subprocess and empty strings

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

我在 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:  [
]

显然结果是一组空括号。但是,如果我直接(在 $ 提示符下)通过 copying/pasting the rimbitd getaddressesbyaccount "" 从输出(即 "The command is: ...")使用完全相同的命令,那么我会得到以下(正确的)输出:

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

其他命令按描述工作(发送硬币、检查余额等)。我只是无法让它工作,唯一的区别是非工作命令需要发送一个空字符串。我试过使用 n = "" 然后连接:commands + n(不高兴)。我试过使用:

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

我尝试过使用多种方法来获取空字符串,但 none 都奏效了。

拆分 '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 关键字参数。