2017-01-29 11 views
0

複数のpythonコマンドを1つのシステムコール(R)に渡す必要があり、構文に問題があります。私は結合しようとしている何R複数のPythonコマンドを使用したシステムコール

system("python "file1.py" -f "module_to_load1.py" -o "output_loc_file1"") 
system("python "file2.py" -f "module_to_load2.py" -o "output_loc_file2"") 

簡体コード:

pystr="python -c print('hi')" 
system(paste(pystr, " && ", pystr, sep="")) 

私の所望の出力は次のとおりです。

hi 
hi 

私は、コマンドに直接コードを入力した場合プロンプトが表示されたら、希望の出力が得られます:

python -c print('hi') && python -c print('hi') 

>> hi 
>> hi 

しかし、システムコールでは単一の「hi」しか返されないため、私のダムエラーが何であるか把握できません。どんな助けでも大歓迎です。

答えて

0

あなたは厄介なシステムコールを管理しようとするよりもスクリプトとして保存する方がいいでしょう:Rから次にmy.py

print "hi" 
print "hi" 

ファイルを

> system("python my.py") 
hi 
hi 

あなたの実際のコードがはるかに複雑な場合は、Pythonコードを生成し、それを呼び出してファイルに書き込むことができます。

+0

私は実際のコードでは2つのpythonファイルを呼び出していますが、それぞれはargparseも使用しています(明確にするために完全なコードを追加しました)。 2つのシステムコールを直列に持つmy.pyを作ることができます - それはお勧めでしょうか? –

+0

すべての '.py'を' master.py'にモジュールとしてインポートし、それを単一の 'system()'呼び出しで実行します。 – Parfait

+0

@ r-noob。それを1つにロールアップしてください。これはRからの呼び出しを単純化し、Dirkが説明したように引用符を計算するという面倒を避けます。 –

0

引用符を並び替えることはできません。埋め込み引用符をエスケープする必要があります。だからではなく、

system("python "file1.py" -f "module_to_load1.py" -o "output_loc_file1"") 

system("python \"file1.py\" -f \"module_to_load1.py\" -o \"output_loc_file1\"") 

または単にファイル名が面倒な文字が含まれていないとして引用符を省略するかの操作を行います。

system("python file1.py -f module_to_load1.py -o output_loc_file1") 

適切なPythonスクリプトを書くことについての勧告はまだ良いです1。

関連する問題