2013-03-15 79 views
0

我有我的最新升级后似乎已停止工作的脚本。为了找到问题,我写了一个小脚本:Python不打印换行

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() 

这只是打印“你好”和一个新行,但我期待两个换行符。这是什么造成的? (我使用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以使其执行任何所需的操作。

回答

5

xargs手册页:

本手册页文档的xargs GNU版本。 xargs从标准输入中读取项目,由 空格(可以使用双引号或单引号或反斜线保护)或换行符分隔,并使用任何初始值执行 命令(默认为/ bin/echo)参数后跟从stan- dard输入中读取的项目。 标准输入上的空行会被忽略。

(强调增加)。

此外,要添加 - 您看到的换行符是从echo本身。无论如何,xargs不会传递它。

+0

问题是,我实际上将其管道到'hdparm --trim-sector-ranges-stdin',它具有相同的效果。直到最近,换行符都被正确地传送并且一切正常。我做了一个系统更新,现在hdparm接收一大堆范围来修剪它无法处理的内容。 – Ivan 2013-03-15 04:33:46

+0

如果你用这个信息更新问题,那么我们可以看到你在做什么。 – FatalError 2013-03-15 04:36:00

+0

我添加了给我麻烦的脚本 – Ivan 2013-03-15 04:44:59