Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 生成文件和.write发生在.call之后,即使不是这样写的_Python_Python 3.x_Subprocess - Fatal编程技术网

Python 生成文件和.write发生在.call之后,即使不是这样写的

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

我试图通过python传递一个java文件,并将shell输出写入log.txt文件。这是工作,除了我的手动中断正在添加到文件的结尾。关于为什么
.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”吗?这不会总是返回相同的结果吗?谢谢