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
关键字参数。
我正在尝试使用 .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
关键字参数。