2

コンテキスト:このスニペット-nを Mac で実行したところ、文字化けした出力に文字列が散らばっていることに気付きました。答えは、shUbuntu では-nフラグを理解できるがsh、私の Mac では理解できないということです。

ここに画像の説明を入力

ご覧のとおり、python は"-n abc\n"、期待される"abc".

コールはとos.systemを分離できませんか? zsh(反転はzshがEOFを示す方法です)とbashの両方で発生しますが、間違っていなければ、python-callでシェルを呼び出すべきではありません(そう言うものを読んだからではなく、私の常識に基づいています) )(編集:私は完全に間違っていることが判明し、システムはサブシェルを実行します)-nabc%

ruby がどのように動作するかを見てください:

ここに画像の説明を入力

そして、さらにいくつかのテスト:

ここに画像の説明を入力 スクリプトが送信されたように見えshますが、その時点でのシェルの環境変数はまだzsh. 理にかなっています。環境をきれいにするために何もしませんでした...おそらくsh自動的に設定されません$SHELL

4

3 に答える 3

2

Python ドキュメントの状態:

[ os.system] は、標準 C 関数 system() を呼び出すことによって実装されます。

C の man ページを参照してsystemください。

system() は /bin/sh -c command を呼び出して command で指定されたコマンドを実行し、コマンドが完了すると戻ります。コマンドの実行中、SIGCHLD はブロックされ、SIGINT と SIGQUIT は無視されます。

強調は私です。

echo の man ページでは、次のように説明されています。

一部のシェルは、このユーティリティと類似または同一の組み込みの echo コマンドを提供する場合があります。最も顕著なのは、sh(1) の組み込みの echo が -n オプションを受け入れないことです。builtin(1) のマニュアル ページを参照してください。

そして、これを自分で確認できます:

$ sh -c "echo -n hello"
-n hello
$ bash -c "echo -n hello"
hello
于 2013-02-14T04:33:13.077 に答える
0

ドキュメントに記載されているようos.systemに、サブシェルでコマンドを実行します。システムによっては、whosechoコマンドが理解できないシェルを使用する場合があります-n

選択したシェルを確実に使用する場合は、の代わりにandオプションを使用subprocess.callしてください。shell=Trueexecutable='<shell>'os.system

于 2013-02-14T04:38:14.997 に答える
0

これはどうですか?
python -c 'import subprocess; subprocess.call(["echo", "-n", "abc"])'
osxでテストされ、適切に動作しています

于 2013-02-14T04:42:11.353 に答える