运行 在 Ubuntu 上使用终端的文件:os.system 在 subprocess.Popen 找不到文件的情况下可以正常工作
Running a file using terminal on Ubuntu: os.system is functional where subprocess.Popen cannot find the file
我正在尝试在 Ubuntu 版本 16 上使用 subprocess.Popen
通过 python 运行 文件。安装了开源应用程序并使用命令 [=终端上的 19=] 将打开 Copasi GUI,而终端上的命令 CopasiSE
将打开同一程序的命令行界面。使用 CopasiSE <file path>
,其中 <file path>
是 copasi 文件的完整路径,将为 运行 提交 copasi 文件。这在手动完成时完全有效。
代码:
`
In [13]: f='/home/b3053674/Documents/PyCoTools/PyCoTools/PyCoToolsTutorial/Kholodenko_0.cps'
In [14]: import os
In [15]: f
Out[15]: '/home/b3053674/Documents/PyCoTools/PyCoTools/PyCoToolsTutorial/Kholodenko_0.cps'
In [16]: os.path.isfile(f)
Out[16]: True
并且程序的符号链接也是有效的:
In [20]: subprocess.Popen('CopasiSE')
Out[20]: <subprocess.Popen at 0x7f72a2643e90>
In [21]: COPASI 4.16 (Build 104)
The use of this software indicates the acceptance of the attached license.
To view the license please use the option: --license
Usage: CopasiSE [options] [file]
--SBMLSchema schema The Schema of the SBML file to export.
--configdir dir The configuration directory for copasi. The
default is .copasi in the home directory.
--configfile file The configuration file for copasi. The
default is copasi in the ConfigDir.
--exportBerkeleyMadonna file The Berkeley Madonna file to export.
--exportC file The C code file to export.
--exportXPPAUT file The XPPAUT file to export.
--home dir Your home directory.
--license Display the license.
--maxTime seconds The maximal time CopasiSE may run in
seconds.
--nologo Surpresses the startup message.
--validate Only validate the given input file (COPASI,
Gepasi, or SBML) without performing any
calculations.
--verbose Enable output of messages during runtime to
std::error.
-c, --copasidir dir The COPASI installation directory.
-e, --exportSBML file The SBML file to export.
-i, --importSBML file A SBML file to import.
-s, --save file The file the model is saved to after work.
-t, --tmp dir The temp directory used for autosave.
并且使用 os.system
有效:
In [21]: os.system('CopasiSE {}'.format(f))
COPASI 4.16 (Build 104)
The use of this software indicates the acceptance of the attached license.
To view the license please use the option: --license
这是 运行ning Copasi 文件的预期输出。
但是 subprocess.Popen
给我这个:
In [22]: subprocess.Popen('CopasiSE {}'.format(f))
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-22-c8cd60af5d46> in <module>()
----> 1 subprocess.Popen('CopasiSE {}'.format(f))
/home/b3053674/anaconda2/lib/python2.7/subprocess.pyc in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
388 p2cread, p2cwrite,
389 c2pread, c2pwrite,
--> 390 errread, errwrite)
391 except Exception:
392 # Preserve original exception in case os.close raises.
/home/b3053674/anaconda2/lib/python2.7/subprocess.pyc in _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, to_close, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite)
1022 raise
1023 child_exception = pickle.loads(data)
-> 1024 raise child_exception
1025
1026
OSError: [Errno 2] No such file or directory
In [23]:
有人能告诉我为什么吗?
使用 subprocess.Popen 您应该单独传递参数:subprocess.Popen(['CopasiSE', f])
因为它是 shell(由 os.system()
调用)分割命令行。
我正在尝试在 Ubuntu 版本 16 上使用 subprocess.Popen
通过 python 运行 文件。安装了开源应用程序并使用命令 [=终端上的 19=] 将打开 Copasi GUI,而终端上的命令 CopasiSE
将打开同一程序的命令行界面。使用 CopasiSE <file path>
,其中 <file path>
是 copasi 文件的完整路径,将为 运行 提交 copasi 文件。这在手动完成时完全有效。
代码: `
In [13]: f='/home/b3053674/Documents/PyCoTools/PyCoTools/PyCoToolsTutorial/Kholodenko_0.cps'
In [14]: import os
In [15]: f
Out[15]: '/home/b3053674/Documents/PyCoTools/PyCoTools/PyCoToolsTutorial/Kholodenko_0.cps'
In [16]: os.path.isfile(f)
Out[16]: True
并且程序的符号链接也是有效的:
In [20]: subprocess.Popen('CopasiSE')
Out[20]: <subprocess.Popen at 0x7f72a2643e90>
In [21]: COPASI 4.16 (Build 104)
The use of this software indicates the acceptance of the attached license.
To view the license please use the option: --license
Usage: CopasiSE [options] [file]
--SBMLSchema schema The Schema of the SBML file to export.
--configdir dir The configuration directory for copasi. The
default is .copasi in the home directory.
--configfile file The configuration file for copasi. The
default is copasi in the ConfigDir.
--exportBerkeleyMadonna file The Berkeley Madonna file to export.
--exportC file The C code file to export.
--exportXPPAUT file The XPPAUT file to export.
--home dir Your home directory.
--license Display the license.
--maxTime seconds The maximal time CopasiSE may run in
seconds.
--nologo Surpresses the startup message.
--validate Only validate the given input file (COPASI,
Gepasi, or SBML) without performing any
calculations.
--verbose Enable output of messages during runtime to
std::error.
-c, --copasidir dir The COPASI installation directory.
-e, --exportSBML file The SBML file to export.
-i, --importSBML file A SBML file to import.
-s, --save file The file the model is saved to after work.
-t, --tmp dir The temp directory used for autosave.
并且使用 os.system
有效:
In [21]: os.system('CopasiSE {}'.format(f))
COPASI 4.16 (Build 104)
The use of this software indicates the acceptance of the attached license.
To view the license please use the option: --license
这是 运行ning Copasi 文件的预期输出。
但是 subprocess.Popen
给我这个:
In [22]: subprocess.Popen('CopasiSE {}'.format(f))
---------------------------------------------------------------------------
OSError Traceback (most recent call last)
<ipython-input-22-c8cd60af5d46> in <module>()
----> 1 subprocess.Popen('CopasiSE {}'.format(f))
/home/b3053674/anaconda2/lib/python2.7/subprocess.pyc in __init__(self, args, bufsize, executable, stdin, stdout, stderr, preexec_fn, close_fds, shell, cwd, env, universal_newlines, startupinfo, creationflags)
388 p2cread, p2cwrite,
389 c2pread, c2pwrite,
--> 390 errread, errwrite)
391 except Exception:
392 # Preserve original exception in case os.close raises.
/home/b3053674/anaconda2/lib/python2.7/subprocess.pyc in _execute_child(self, args, executable, preexec_fn, close_fds, cwd, env, universal_newlines, startupinfo, creationflags, shell, to_close, p2cread, p2cwrite, c2pread, c2pwrite, errread, errwrite)
1022 raise
1023 child_exception = pickle.loads(data)
-> 1024 raise child_exception
1025
1026
OSError: [Errno 2] No such file or directory
In [23]:
有人能告诉我为什么吗?
使用 subprocess.Popen 您应该单独传递参数:subprocess.Popen(['CopasiSE', f])
因为它是 shell(由 os.system()
调用)分割命令行。