Python 生成文件和.write发生在.call之后,即使不是这样写的
我试图通过python传递一个java文件,并将shell输出写入log.txt文件。这是工作,除了我的手动中断正在添加到文件的结尾。关于为什么Python 生成文件和.write发生在.call之后,即使不是这样写的,python,python-3.x,subprocess,Python,Python 3.x,Subprocess,我试图通过python传递一个java文件,并将shell输出写入log.txt文件。这是工作,除了我的手动中断正在添加到文件的结尾。关于为什么.write发生在子流程之后的任何建议。调用?我对Python非常陌生。谢谢 代码片段 import subprocess outfile = open('c:\\log2.txt', 'a') outfile.write("\n\n") outfile.write("-------------------------BEGIN NEW LOG----
.write
发生在子流程之后的任何建议。调用?我对Python非常陌生。谢谢
代码片段
import subprocess
outfile = open('c:\\log2.txt', 'a')
outfile.write("\n\n")
outfile.write("-------------------------BEGIN NEW LOG--------------------------------------")
outfile.write("\n\n")
subprocess.call(['java.exe',
'-cp',
'c:\\dev\\dataloader\\dataloader-36.0.0-uber.jar',
'-Dsalesforce.config.dir=c:\\dev\\dataloader\\',
'com.salesforce.dataloader.process.ProcessRunner',
'process.name=csvCRExtract'],
stdout=outfile)
outfile.close()
在子流程.Call()之前调用output.flush()
输出
使用缓冲i/o,这意味着在实际将数据写入操作系统之前,它会等待写入的数据量达到最小值,以避免大量缓慢的系统写入调用flush
告诉缓冲区立即将所有内容发送到操作系统。您的程序正在执行以下操作:
- 将日志头写入本地缓冲区
- 调用java进程,该进程写入自己的缓冲区,然后在进程退出时写入文件
- 当
关闭文件时,将本地缓冲区刷新到文件
这个答案有一幅图,并解释了更多:
在子流程调用()之前调用output.flush()
输出
使用缓冲i/o,这意味着在实际将数据写入操作系统之前,它会等待写入的数据量达到最小值,以避免大量缓慢的系统写入调用flush
告诉缓冲区立即将所有内容发送到操作系统。您的程序正在执行以下操作:
- 将日志头写入本地缓冲区
- 调用java进程,该进程写入自己的缓冲区,然后在进程退出时写入文件
- 当
关闭文件时,将本地缓冲区刷新到文件
这个答案有一幅图,并解释了更多:
如果在调用call()
之前调用close()
会发生什么?您可能希望在子流程.call()之前调用outfile.flush()
。这可能是一种竞争条件,进程在清空其输出缓冲区时获胜。@Kevin,这不起作用,因为我正在关闭文件(我想是这样)。下面是错误:ValueError:I/O操作在关闭的文件上
@Harvey确实有效,但是您能定义“race”吗?这不会总是返回相同的结果吗?谢谢如果在调用call()
之前调用close()
会发生什么情况?您可能希望在子流程.call()之前调用outfile.flush()
。这可能是一种竞争条件,进程在清空其输出缓冲区时获胜。@Kevin,这不起作用,因为我正在关闭文件(我想是这样)。下面是错误:ValueError:I/O操作在关闭的文件上
@Harvey确实有效,但是您能定义“race”吗?这不会总是返回相同的结果吗?谢谢