我的脚本似乎在我最新升级后停止工作.为了找到问题,我写了一个小脚本:
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()
Run Code Online (Sandbox Code Playgroud)
这只是打印"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()
Run Code Online (Sandbox Code Playgroud)
编辑:我认为问题在于我的脚本本身.我需要将EOF发送到hdparm以使其做任何应该做的事情.
从xargs手册页:
本手册页记录了xargs的GNU版本.xargs从标准输入中读取项目,由空格分隔(可以使用双引号或单引号或反斜杠保护)或换行符,并使用任何初始参数执行命令(默认为/ bin/echo)一次或多次通过从标准输入读取的项目. 标准输入上的空行将被忽略.
(重点补充).
另外,要添加 - 您看到的换行符就是echo它自己. xargs无论如何都不会传递它.