0

python-scriptの実行に時間がかかるはずのスクリプトを入手しました。簡単にするために、コマンドラインで引数として実行したい実際のコマンドを指定するだけです。

私が電話すると言う:

python time.py python ratatosk.py < input.txt

以下はすべて、python time.py実行したい実際のコマンドです。

ただし、これを読むsys.argvと:

print 'Number of arguments:', len(sys.argv), 'arguments.'
print 'Argument List:', str(sys.argv)

以下のみを返します。

Number of arguments: 3 arguments.
Argument List: ['time.py', 'python', 'ratatosk.py']

残りの引数はどこに行きましたか? <どうにか剥ぎ取ったようです。

MacBook Pro で Python Python 2.7.3 (v2.7.3:70274d53c1dd、2012 年 4 月 9 日、20:52:43) を実行しています。

4

3 に答える 3

0

< 記号をエスケープする必要があります。電話してみてください:

python time.py python ratatosk.py \< input.txt

このコマンドを実行しやすくするために、< とは別の文字を使用することをお勧めします。

于 2013-08-28T15:08:36.173 に答える
0

シェルのリダイレクトが発生しています

この<文字は、シェルにとって特別な意味を持ちます。stdinこれにより、呼び出されるプログラムは、デフォルト(通常はキーボード)ではなく、その後に続くものから読み取るようになります。

Python はstdin、どこから来たかに関係なく、 からの読み取りのみに関心があります。に表示されるべきではありませんsys.argv

あなたの例でinput.txtは、ユーザーがプログラムにデータを入力する代わりになる可能性が高く、使用法は正しいです。

以下に短い例を示します。

echo.py

text = raw_input()
print text

入力.txt

hello from the file

実行例

$ python echo.py 
hello from the keyboard
hello from the keyboard
$ python echo.py < input.txt
hello from the file
于 2013-08-28T15:10:36.663 に答える
0

UNIX シェルでは、記号「<」はリダイレクトと見なされます。これは、標準入力がディスク上のファイル input.txt から発生することを意味します。

記号が特殊なため、シェルは指定されたコマンドを変換し、カーネルに到達するのは「<」を含まない変更されたコマンドです。

\ を前に追加することで「<」をエスケープできます。これにより、シェルへの特殊文字として検出されず、最終的にシステム引数としてプログラムに渡されます。

于 2013-08-28T15:12:58.910 に答える