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.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)一次或多次,后面跟着任何初始参数通过从标准输入中读取的项目。 标准输入上的空行被忽略。

(强调补充)。

另外,要添加 - 您看到的换行符来自echo它本身。 xargs无论如何都不会传递它。

于 2013-03-15T04:30:43.940 回答