我有一个 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 中实际访问子进程写入的文件?
正如评论中提到的,您以只写模式打开了文件。将第 21 行从
ff = open(file_name0, "wt")
更改为 ff = open(file_name0, 'rt')
或只是 ff = open(file_name0)
。如果您需要读取和写入文件,您可以传递 'wt+'
作为第二个参数以读写模式打开它。