8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

python 使用 popen 调用可执行文件;,无法访问可执行文件写入的文件

LihO 1月前

7 0

我有一个 C++ 文件#include int main(int iArgC, char *apArgV[]) { int iResult = -1; 如果 (iArgC > 1) { FILE *fOut = fopen(apArgV[1], \'wt\'); 如果 (fOu...

我有一个 C++ 文件

#include <cstdio>

int main(int iArgC, char *apArgV[]) {
    int iResult = -1;
    if (iArgC > 1) {
        FILE *fOut = fopen(apArgV[1], "wt");
        if (fOut != NULL) {
            fprintf(fOut, "hello\n");
            fprintf(fOut, "goodbye\n");
            fclose(fOut);
            printf("Written `%s`\n", apArgV[1]);
            iResult = 0;
        } else {
            printf("Coudn´t open %s\n", apArgV[1]);
        }
    } else {
        printf("I need an argument\n");
    }
    return 0; 
}

我是这样编译的

g++ -g -o hello hello.cpp

当我运行时, ./hello /home/jody/hihi,txt 文件 hihi.txt 就被写入了。

然后我有这个python脚本

#!/usr/bin/python

import subprocess as sp
import time

def callHello(file_name) :
    command = ["/home/jody/progs/polyhedronLED/version_c/hello", file_name]
    proc = sp.Popen(command,
                    stdout=sp.PIPE,
                    stderr=sp.PIPE)
    sOut, sError = proc.communicate()
    iResult = proc.returncode
    print("return code: %d"%iResult)
    print("Output:      %s"%sOut)
# -- end def

if __name__ == '__main__':
    file_name0 = "/home/jody/hihi.txt"
    callHello(file_name0)
    
    ff = open(file_name0, "wt")
    lines = ff.readlines()
    ff.close()
    print("output\n%s"%lines)
# -- end if

当我运行该脚本时,我得到输出:

return code: 0
Output:      b'Written `/home/jody/hihi.txt`\n'
Traceback (most recent call last):
  File "/home/jody/progs/polyhedronLED/version_c/./hellocall.py", line 22, in <module>
    lines = ff.readlines()
            ^^^^^^^^^^^^^^
io.UnsupportedOperation: not readable

但当我随后检查输出目录时,该文件 hihi.txt 已被写入。

调用后 time.sleep(5) 延迟 callHello() ,但结果是一样的。

然后我编写了一个 bash 脚本,调用 hello 并随后读取文件的内容:这按预期工作。

何时(或如何)才能在 python 中实际访问子进程写入的文件?

帖子版权声明 1、本帖标题:python 使用 popen 调用可执行文件;,无法访问可执行文件写入的文件
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由LihO在本站《python》版块原创发布, 转载请注明出处!
最新回复 (0)
返回
作者最近主题: