gpt4 book ai didi

python - 命令在终端或程序(Python 和 C++)中给出不同的行为

转载 作者:行者123 更新时间:2023-11-30 03:26:00 26 4
gpt4 key购买 nike

我正在尝试以编程方式执行以下命令:

~$ obabel -:"ccco" -O /home/user/output.png

obabel是一个化学库,基本上如果“”里面的字符串完全是化学上的废话,就不能生成PNG文件,如果是合法的化学结构,就会生成PNG文件。这适用于终端。

但是,如果我使用 Python 调用相同的命令,则会为完全无意义的输入字符串生成 PNG 文件,这些输入字符串在终端中执行命令时不会生成 PNG。

我正在使用这样的子流程:

cmd = 'obabel -:"ccco" -O /home/user/output.png'
proc = sub.Popen([cmd], shell=True, stderr=sub.PIPE)
res = proc.communicate()

我也试过这个:

os.system(cmd)

并尝试了 Python2 和 Python3。从终端或 iPython 运行脚本时会发生这种情况。

我也尝试过使用 C++ 并像这样运行 cmd:

std::string cmd = "obabel -:\"ccco\" -O /home/user/output.png";
system(cmd.c_str());

最佳答案

默认情况下 Popen 需要一个字符串参数列表,但是如果您传递 shell=True,您可以将命令作为一个简单的字符串提供(它将在如 hell )。目前,您传递的是一个列表,其中包含一个包含整个命令的字符串,您可以使用以下任一方法:

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 的影响,直接传递输入时不需要它(否则 " 字符将成为字符串并导致语法无效)。

关于python - 命令在终端或程序(Python 和 C++)中给出不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48640209/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com