我正在尝试以编程方式执行以下命令:
application:willContinueUserActivityWithType:
obabel是一个化学库,基本上如果""它是完全无意义的化学,它不能生成PNG文件,如果它是一个合法的化学结构,将生成PNG文件。这适用于终端。
但是,如果我用Python调用相同的命令,则会为完整的无意义输入字符串生成PNG文件,这些字符串在终端中执行命令时不会生成PNG。
我正在使用这样的子流程:
~$ obabel -:"ccco" -O /home/user/output.png
我也试过这个:
cmd = 'obabel -:"ccco" -O /home/user/output.png'
proc = sub.Popen([cmd], shell=True, stderr=sub.PIPE)
res = proc.communicate()
尝试了Python2和Python3。从终端或iPython运行脚本时会发生这种情况。
我也尝试过使用C ++并像这样运行cmd:
os.system(cmd)
答案 0 :(得分:2)
默认情况下Popen
需要一个字符串参数列表,但是如果传递shell=True
,则可以将该命令作为简单字符串提供(它将在shell中执行)。目前,您传入的列表中包含一个包含整个命令的字符串,您可以使用以下任一方法:
proc = subprocess.Popen('obabel -:"ccco" -O output.png', shell=True, stderr=subprocess.PIPE)
proc = subprocess.Popen(['obabel', '-:ccco', '-O', 'output.png'], stderr=subprocess.PIPE)
使用引号转义SMILES字符串似乎是为了保护它免受shell的影响,并且在直接传递输入时不需要它(否则"
字符将成为字符串的一部分并导致语法无效。)