0

最新のアップグレード後に動作を停止したように見えるスクリプトがあります。問題を見つけるために、私は小さなスクリプトを書きました:

import subprocess

hdparm = subprocess.Popen(["xargs","echo"],
                stdin=subprocess.PIPE)

hdparm.stdin.write("Hello\n")
hdparm.stdin.write("\n")
hdparm.stdin.close()
hdparm.wait()
quit()

これは「Hello」と改行を出力するだけですが、2 つの改行が必要です。何が原因ですか?(現在2.7.3を使用しています)

編集:問題のあるスクリプトは次のとおりです(明確にするために編集されています):

hdparm = subprocess.Popen(["hdparm", "--please-destroy-my-drive", "--trim-sector-ranges-stdin", "/dev/sda"],
               stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
hdparm_counter = 0
for rng in ranges_to_trim:
    hdparm.stdin.write("%d:%d\n" % (rng["begin"],rng["length"]))
    hdparm_counter += 1
    if hdparm_counter > 63:
         hdparm.stdin.write("\n")
         hdparm_counter = 0
if hdparm_counter != 0:
    hdparm.stdin.write("\n")
hdparm.stdin.close()
hdparm.wait()

編集:問題はスクリプト自体にあると思います。EOF を hdparm に送信して、想定どおりに動作させる必要があります。

4

1 に答える 1

5

xargsマニュアルページから:

このマニュアルページでは、xargs の GNU バージョンについて説明しています。xargs は、空白 (二重引用符、単一引用符、またはバックスラッシュで保護できます) または改行で区切られた標準入力から項目を読み取り、コマンド (デフォルトは /bin/echo) を 1 回以上実行し、その後に任意の初期引数が続きます。標準入力から読み込まれた項目によって。 標準入力の空白行は無視されます。

(強調を追加)。

また、追加する - あなたが見る改行はechoそれ自体からのものです。 xargsとにかく渡さない。

于 2013-03-15T04:30:43.940 に答える