Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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 subprocess.call未在等待_Python_Blocking - Fatal编程技术网

Python subprocess.call未在等待

Python subprocess.call未在等待,python,blocking,Python,Blocking,output.readlines()返回[],即使文件是用一些数据写入的。这里有点不对劲 看起来subprocess.call()没有阻塞,并且文件是在read函数之后写入的。如何解决这个问题?将open('pf_d.txt',w+')作为outputfile:构造的称为上下文管理器。在这种情况下,资源是由句柄/file对象outputfile表示的文件。上下文管理器确保在上下文处于左侧时关闭文件。关闭意味着刷新,然后重新打开文件将显示其所有内容。因此,解决问题的一个方法是在文件关闭后读取文件:

output.readlines()返回[],即使文件是用一些数据写入的。这里有点不对劲

看起来subprocess.call()没有阻塞,并且文件是在read函数之后写入的。如何解决这个问题?

将open('pf_d.txt',w+')作为outputfile:构造的
称为上下文管理器。在这种情况下,资源是由句柄/file对象
outputfile
表示的文件。上下文管理器确保在上下文处于左侧时关闭文件。关闭意味着刷新,然后重新打开文件将显示其所有内容。因此,解决问题的一个方法是在文件关闭后读取文件:

with open('pf_d.txt', 'w+') as outputfile:
        rc = subprocess.call([pf, 'disable'], shell=True, stdout=outputfile, stderr=outputfile)
        print outputfile.readlines()
另一个选项是在刷新和查找后重新使用相同的文件对象:

with open('pf_d.txt', 'w+') as outputfile:
    rc = subprocess.call(...)

with open('pf_d.txt', 'r') as outputfile:
    print outputfile.readlines()
文件句柄始终由文件指针表示,指示文件中的当前位置
write()
将此指针转发到文件末尾
seek(0)
将其移回开头,以便后续的
read()
从文件开头开始。

将open('pf_d.txt','w+')作为输出文件的
构造称为上下文管理器。在这种情况下,资源是由句柄/file对象
outputfile
表示的文件。上下文管理器确保在上下文处于左侧时关闭文件。关闭意味着刷新,然后重新打开文件将显示其所有内容。因此,解决问题的一个方法是在文件关闭后读取文件:

with open('pf_d.txt', 'w+') as outputfile:
        rc = subprocess.call([pf, 'disable'], shell=True, stdout=outputfile, stderr=outputfile)
        print outputfile.readlines()
另一个选项是在刷新和查找后重新使用相同的文件对象:

with open('pf_d.txt', 'w+') as outputfile:
    rc = subprocess.call(...)

with open('pf_d.txt', 'r') as outputfile:
    print outputfile.readlines()
文件句柄始终由文件指针表示,指示文件中的当前位置
write()
将此指针转发到文件末尾
seek(0)
将其移回开头,以便后续的
read()
从文件开头开始。

将open('pf_d.txt','w+')作为输出文件的
构造称为上下文管理器。在这种情况下,资源是由句柄/file对象
outputfile
表示的文件。上下文管理器确保在上下文处于左侧时关闭文件。关闭意味着刷新,然后重新打开文件将显示其所有内容。因此,解决问题的一个方法是在文件关闭后读取文件:

with open('pf_d.txt', 'w+') as outputfile:
        rc = subprocess.call([pf, 'disable'], shell=True, stdout=outputfile, stderr=outputfile)
        print outputfile.readlines()
另一个选项是在刷新和查找后重新使用相同的文件对象:

with open('pf_d.txt', 'w+') as outputfile:
    rc = subprocess.call(...)

with open('pf_d.txt', 'r') as outputfile:
    print outputfile.readlines()
文件句柄始终由文件指针表示,指示文件中的当前位置
write()
将此指针转发到文件末尾
seek(0)
将其移回开头,以便后续的
read()
从文件开头开始。

将open('pf_d.txt','w+')作为输出文件的
构造称为上下文管理器。在这种情况下,资源是由句柄/file对象
outputfile
表示的文件。上下文管理器确保在上下文处于左侧时关闭文件。关闭意味着刷新,然后重新打开文件将显示其所有内容。因此,解决问题的一个方法是在文件关闭后读取文件:

with open('pf_d.txt', 'w+') as outputfile:
        rc = subprocess.call([pf, 'disable'], shell=True, stdout=outputfile, stderr=outputfile)
        print outputfile.readlines()
另一个选项是在刷新和查找后重新使用相同的文件对象:

with open('pf_d.txt', 'w+') as outputfile:
    rc = subprocess.call(...)

with open('pf_d.txt', 'r') as outputfile:
    print outputfile.readlines()


文件句柄始终由文件指针表示,指示文件中的当前位置
write()
将此指针转发到文件末尾
seek(0)
将其移回开头,以便后续的
read()
从文件开头开始。

在所有语言中,我希望Python遵循一致的内存模型,特别是在顺序程序中。你在说什么?这里有什么不一致?文件指针算法在任何地方都是相同的,无论是在C语言中还是在任何高级编程语言中,它们通常在OS文件句柄周围提供一个非常薄的包装。句柄对应于一个指针,如果该指针位于文件的末尾,则无法获得文件的内容。将指针重新绕到开头,然后开始阅读。没有魔法。事实上,我认为我们都走错了方向。在您的情况下,子进程将文件句柄继承到
outputfile
,因此父进程中的文件指针应保持在位置0。也就是说,如果子进程真的终止,读操作应该提供所有内容。请尝试我在回答中提出的第一种方法,并让我知道它是否有效。我已设法使它与Popen和Communication()一起工作。我决定不将文件作为子进程写入。调用是无法保证的。我很肯定,我提出的第一种方法会起作用。你试过了吗?在所有语言中,我希望Python遵循一致的内存模型,特别是在顺序程序中。你在说什么?这里有什么不一致?文件指针算法在任何地方都是相同的,无论是在C语言中还是在任何高级编程语言中,它们通常在OS文件句柄周围提供一个非常薄的包装。句柄对应于一个指针,如果该指针位于文件的末尾,则无法获得文件的内容。将指针重新绕到开头,然后开始阅读。没有魔法。事实上,我认为我们都走错了方向。在您的情况下,子进程将文件句柄继承到
outputfile
,因此父进程中的文件指针应保持在位置0。也就是说,如果子进程真的终止,读操作应该提供所有内容。请尝试我在回答中提出的第一种方法,并让我知道它是否有效。我已设法使它与Popen和Communication()一起工作。我决定不将其作为子进程写入文件。无法保证调用。我很确定第一种方法会起作用