Python 2.7 将子进程pid写入日志文件时引发错误

Python 2.7 将子进程pid写入日志文件时引发错误,python-2.7,debian,subprocess,Python 2.7,Debian,Subprocess,我有一个python脚本,它运行两个子进程 我试图实现的是,我希望将子流程ID写入一个单独的日志文件。子流程甚至可以运行几个小时,所以我想用PIDs跟踪它们 不知何故,我无法将PIDs写入日志文件,因为我遇到了异常 tmprocess = subprocess.Popen(['sudo', logstashbin, '-f', tmconf], stdout=subprocess.PIPE, stderr=subprocess.STDOUT) tmprocess.wait() segmentpr

我有一个python脚本,它运行两个子进程

我试图实现的是,我希望将子流程ID写入一个单独的日志文件。子流程甚至可以运行几个小时,所以我想用PIDs跟踪它们

不知何故,我无法将PIDs写入日志文件,因为我遇到了异常

tmprocess = subprocess.Popen(['sudo', logstashbin, '-f', tmconf], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
tmprocess.wait()
segmentprocess = subprocess.Popen(['sudo', logstashbin, '-f', segmentconf], stdout=subprocess.PIPE, stderr=subprocess.STDOUT).pid
print segmentprocess

try:
    pidfile = open("pid.log", "a+")
    try:
        pidfile.write(segmentprocess)
    finally:
        pidfile.close()
except:
    raise IOError("Error")
这是我得到的输出

1237
Traceback (most recent call last):
  File "./init.py", line 285, in <module>
    main(sys.argv[1:])
  File "./init.py", line 282, in main
    init(arg)
  File "./init.py", line 264, in init
    run_logstash(langPath)
  File "./init.py", line 228, in run_logstash
    raise IOError("Error")
IOError: Error
1237
回溯(最近一次呼叫最后一次):
文件“/init.py”,第285行,在
main(sys.argv[1:])
文件“/init.py”,第282行,在main中
初始化(arg)
文件“/init.py”,第264行,在init中
运行日志(langPath)
文件“/init.py”,第228行,在run_logstash中
引发IOError(“错误”)
IOError:错误
虽然正在打印PID,但它不会写入文件。
注意:如果我只是通过替换“segmentprocess”将一些随机字符串写入日志文件,那么它就可以工作了。所以文件打开并没有什么问题

您提供的堆栈跟踪抛出的异常与代码中的异常不同。有什么我们没看到的吗?你能包括你提供的行号范围吗?另外,如果您试图调试异常,为什么要重新引发其他异常?只要让真正的例外冒出来,并张贴在这里。不要抓住它,如果你抓住了,确保你只是再次举起。而不是

raise IOError("Error")
你应该

raise
或者根本不尝试/除非:

pidfile = open("pid.log", "a+")
try:
    pidfile.write(segmentprocess)
finally:
    pidfile.close()

你的缩进看起来不正确。你能检查一下吗?此外,您提供的堆栈跟踪似乎抛出了与代码中不同的异常。有什么我们没看到的吗?你能包括你提供的行号范围吗?另外,如果您试图调试异常,为什么要重新引发其他异常?只要让真正的例外冒出来,并张贴在这里。不要抓住它,如果你抓住了,确保你只是再次举起。与其说是
raiseioerror(“Error”)
@JamieCounsell,不如多谢你的提醒。我在帖子中修复了上面的错误缩进(我的原始代码没有错误缩进问题)。事实上,我已经纠正了这个错误,我抓住这个错误是不明智的。当我删除try,except块时,我确实看到了实际的错误“TypeError:应该是字符缓冲区对象”。我只是做了打字,错误消失了。这样一个错误。我想我还是删除这篇文章好?再次感谢你的帮助。很高兴你能找到答案!我发表了我的评论作为回答。删除帖子或将其标记为已解决。