2010-12-29 13 views
4

私はこのように、私は簡単にいくつかの任意のPythonコードを実行できるようにする「-c」引数を使ってPythonを起動しようとしている: python.exe -c "for idx in range(10): print idx" は今、このコードは正常に動作します私のバッチファイルの中から、私はこれ以上何かしたいときに問題に遭遇しています。「-c」とPythonインタプリタの呼び出しとインデントの問題

は、次のPythonコードを考えてみましょう:

foo = 'bar' 
for idx in range(10): 
    print idx 

これは、その後、標準出力にあなたの0-9を与えるだろう。しかし、私は次の取得するには、区切り文字としてセミコロンを使用して、単一の行にこれを折りたたむ場合:

foo = 'bar';for idx in range(10): print idx 

をし、それがでSyntaxErrorを上げ得るpython.exe -cを使用して実行しよう:

C:\Python>python.exe -c "foo = 'bar';for idx in range(10): print idx" 
    File "<string>", line 1 
    foo = 'bar';for idx in range(10): print idx 
       ^
SyntaxError: invalid syntax 

誰もが知っていますどのように私は実際に別の.pyファイルに切り替えることなくこれを使用することができますか?

私はそうのような呼び出し方法を経由して、.cmdのバッチファイルの中からこれを実行している:

call python.exe -c "blah blah" 

生成されている同じエラーで。

+0

を使用すると、行区切りとして\ nを使用して試してみますか? – ykatchou

+0

ユースケースを明確にするために投稿を編集しました。私が与えた例にもかかわらず、私の意図はコマンドラインからではなく、バッチファイルから実行することです。私はバッチファイルとコマンドラインの両方で同じSyntaxErrorを見ていたので、解決策は同じであると思っていました:/ – aodj

+0

とにかく、引用符をエスケープする問題が発生します - 別のPythonスクリプト代わりにPythonを使用して実行しますか? – jsbueno

答えて

2

改行を使用して文を区切ります。これは私がシェルにそれを入力する方法です:

$ python -c "foo = 'bar' 
for idx in range(10): print idx" 

何がセミコロンはコロンよりタイト結合し、それが混乱してしまうので、動作しません書きました。対照的に、これは次のように機能します。

$ python -c "foo = 'bar'; print foo" 
3

コマンド文字列を複数行の引数として入力する必要があります。 Linuxの場合、これはEnterキーを使用するのと同じくらい簡単です。 (私はそれらを入力する必要はありませんでした、というbashが>文字が追加されます注意してください):

Windowsでは
$ python -c "foo = 'bar' 
> for idx in range(10): 
>  print idx" 

はしかし、あなたが改行文字を取得するにはEnterキーを押すと、空白行を離れる前^キーを入力する必要があります、例えば(cmdによって追加More?

C:\> python.exe -c "foo = 'bar'^ 
More? 
More? for idx in range(10):^ 
More? 
More?  print idx" 
+0

ああ、謝罪、私は私のユースケースの完全な文脈を指定しなかった。あなたが書いたことはうまくいきましたが、私はWindows(!)上でキャレットの使用を知りませんでしたが、 によって '.cmdファイル内からこれを呼び出そうとしています' call python.exe -c "blah blah" ' – aodj

+0

@alexanderプログラムスクリプトを普通に書きますが、実際の改行を使う場所では '\ n'を使います。 – marcog

+0

私はそれを働かせることができませんでした。 \ nは有効に解析されません。 – aodj

関連する問題