我的脚本似乎在我最近的升级后停止了工作。为了找到问题,我写了一个小脚本:
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以使其做任何应该做的事情。
答案 0 :(得分:5)
来自xargs
手册页:
本手册页记录了xargs的GNU版本。 xargs从标准输入读取项目,由。分隔 空格(可以用双引号或单引号或反斜杠保护)或换行符,并执行 命令(默认为/ bin / echo)一次或多次使用任何初始参数,后跟从stan-读取的项 dard输入。 标准输入上的空行将被忽略。
(重点补充)。
此外,要添加 - 您看到的换行符来自echo
本身。无论如何xargs
都没有传递它。