2017-06-17 13 views
0

exit(0)がPythonインタプリタに通知してシステムに0を返すという印象を受けました。例えば、サブプロセス呼び出しで予期しないインデントが発生しました

from subprocess import check_call 
check_call('python3 -c "exit(0)"', shell=True) # returns 0 

しかし

check_call(['/usr/bin/python3', '-c "exit(0)"']) 

リターン1:空白が潜入しているところ

>>> check_call(['/usr/bin/python3', '-c "exit(0)"']) 
    File "<string>", line 1 
    "exit(0)" 
    ^
IndentationError: unexpected indent 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/lib/python3.5/subprocess.py", line 581, in check_call 
    raise CalledProcessError(retcode, cmd) 
subprocess.CalledProcessError: Command '['/usr/bin/python3', '-c "exit(0)"']' returned non-zero exit status 1 

は、私が言うことができない何が起こっていますか。?

+2

'-c" exit(0) "'を2つの別々の引数に分割しようとしましたか? –

+0

@OliverCharlesworth私はそれが答えだと思います。 –

+0

各コマンドライン引数は、個別のリスト項目として渡す必要があります。 'shlex.split( 'python3 -c" exit(0) "')'を使ってシェルコマンドからドラフトリストを生成することができます。 – jfs

答えて

4
-cフラグは別の引数が続いていない場合は、現在の引数の残りの部分はPythonコードとして解釈されることが表示されます

:だから

>> python3 -c 'print("yes")' 
yes 

>> python3 '-cprint("yes")' 
yes 

>> python3 '-c print("yes")' 
    File "<string>", line 1 
    print("yes") 
    ^
IndentationError: unexpected indent 

次の両方が第一の変形が感じるものの、動作するはずですほとんどの慣用/安全:

関連する問題