命令在终端或程序中提供不同的行为(Python和C )
Command gives different behaviour in terminal or in program (Python and C++)
我试图以编程方式执行以下命令:
~$ 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
,则可以将命令作为简单字符串提供(将在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)
用引号逃脱了微笑字符串似乎是为了保护它免受外壳的侵害,而直接传递输入时,您不需要它(否则"
字符将是字符串的一部分并导致无效的语法(。
相关文章:
- 如何运行位于boost/libs/python/example/tutorial目录中的hello.cpp和Jamfil
- Pybind11:将元组列表从Python传递到C++
- 如何在linux终端中同时编译和运行c++代码
- 如何在c++中使用引用实现类似python的行为
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 递归列出所有目录中的C++与Python与Ruby的性能
- IPC使用多个管道和分支进程来运行Python程序
- 从python中调用C++函数并获取返回值
- 终端不会为C++文件创建.exe文件吗
- Python 3.7 和 excess_args 的 SWIG 问题
- Python中的for循环与C++有何不同
- 如何处理linux终端中带有负号(-)的C++中的命令行参数
- VS Code "command":"make"与终端窗口中的命令行"make"不同
- 使用Pybind11向Python公开Eigen::张量
- Python str to C++ to Python str
- 如何使用Python从C++中读取谷物序列化数据
- 命令在终端或程序中提供不同的行为(Python和C )
- 如何使用python skd与彭博终端连接
- 如何使用Boost::P ython打印到Python终端
- 如何使用c++/python程序在终端中运行程序,然后在该程序中执行语句