Windows 7 Python Windows7:奇数行为打开附加文件

Windows 7 Python Windows7:奇数行为打开附加文件,windows-7,file-io,subprocess,python,Windows 7,File Io,Subprocess,Python,在Windows7下使用Python以追加模式('a+')打开文件时,我看到了一些奇怪的行为 我想知道该行为实际上是否不正确,或者我误解了如何使用以下代码: log_file= open(log_file_path, "a+") return_code = subprocess.call(["make", target], stdout=log_file, stderr=subprocess.STDOUT) log_file.close() 上述代码行未正确附加到文件中。事实上,在后续运行中,

在Windows7下使用Python以追加模式('a+')打开文件时,我看到了一些奇怪的行为

我想知道该行为实际上是否不正确,或者我误解了如何使用以下代码:

log_file= open(log_file_path, "a+")
return_code = subprocess.call(["make", target], stdout=log_file, stderr=subprocess.STDOUT)
log_file.close()
上述代码行未正确附加到文件中。事实上,在后续运行中,它甚至不会修改文件。 我也使用pythonshell进行了测试。 一旦文件第一次打开,进行多个子进程调用将正确地追加到文件中,但是一旦文件关闭并重新打开,它将不再追加

有人有线索吗

谢谢


更简单地说,这里的问题是另一组将失败的步骤:

log_file=open("temp.txt", "a+")
log_file.write("THIS IS A TEST")
log_file.close()
log_file=open("temp.txt", "a+")
subprocess.call(["echo", "test"], stdout=log_file, stderr=subprocess.STDOUT, shell=True)
log_file.close()
如果打开文件temp.txt,我会看到:

测试是一个相互的F**测试


看起来您的问题在于使用shell=True。发件人:

在Unix上,shell=True:如果args是字符串,则指定 要通过shell执行的命令字符串。这意味着 字符串的格式必须与在 shell提示符。例如,这包括引用或反斜杠 转义包含空格的文件名。如果args是序列,则 第一项指定命令字符串,任何附加项都将 被视为shell本身的附加参数

所以看起来“echo”是命令,“test”作为参数发送给shell,而不是“echo”

因此,将子流程调用更改为:

subprocess.call("echo test", stdout=log_file, stderr=subprocess.STDOUT, shell=True)
或:

至少在我的测试中修复了该问题。

请参阅


简而言之:在附加模式下打开文件会使文件ptr处于依赖于实现的状态。在windows上和在linux上获得相同的结果。

这并不能真正回答问题,因为他显然需要使用
子流程
,但这将有助于将问题缩小到子流程调用或打开/写入/关闭调用……这最好放在注释中,因为它不能解决问题,因此这不是一个答案,IMO。因此,将子流程从等式中剔除并不会出现相同的问题。我在原始问题中添加了一个编辑,以显示其失败的更简单版本。我在下面更新了我的答案,以反映您发布的新信息,减去咒骂:)
subprocess.call(["echo", "test"], stdout=log_file, stderr=subprocess.STDOUT)