2017-06-10 17 views
0

私はPython経由でUbuntuのバージョン16でsubprocess.Popenを使用してファイルを実行しようとしています。端末のコマンドCopasiUIはCopasiのGUIを開き、端末のコマンドCopasiSEは同じプログラムへのコマンドラインインターフェイスを開きます。 CopasiSE <file path>を使用すると、<file path>はcopasiファイルへの完全なパスです。実行するためにcopasiファイルを送信します。これは手動で完了したときに完全に機能します。Ubuntuでターミナルを使用してファイルを実行すると、os.systemは機能しますが、subprocess.Popenはファイルを見つけることができません

コード: `

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 

これが予想される出力実行中のCの場合opasiファイル。

しかし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]: 

を誰もが、なぜ勧めてもらえますか?

答えて

1

subprocess.Popenを使用すると、コマンドラインを分割するシェル(os.system()が呼び出されるため)を個別に渡す必要があります。subprocess.Popen(['CopasiSE', f])

関連する問題