在Facebook上,有一个简单的挑战 - 用你的语言写"我是一名程序员"。
当然,我可以这样做
print("I am a programmer")
这很无聊。无论如何,我需要进行心理健康检查。
因此,我编写了一个 Python3 脚本,该脚本编写了一个C++文件,尝试编译它,获取C++程序的输出,并显示"我是程序员"。
from os import system
from subprocess import getoutput
from subprocess import call
def main(string):
# removes the old version, if it exists
system("rm -rf program.cpp")
# creates the file
f = open("program.cpp", "a")
output = "#include <iostream>n"
f.write(output)
output = "using namespace std;n"
f.write(output)
output = "int main()n{n"
f.write(output)
output = """tcout << "I am a programmer" << endl;n"""
f.write(output)
output = "return 0;n"
f.write(output)
output = "}n"
f.write(output)
# COMPILE!
call("g++ program.cpp", shell=True)
# call the program, get its output...
out = getoutput("./a.out")
# print the output
print(out)
main("I am a programmer")
。那么我无法编译:
/usr/bin/ld: /usr/lib/gcc/x86_64-linux-gnu/8/../../../x86_64-linux-gnu/Scrt1.o: in function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
program.cpp
包含int main()
,所以这不可能是问题。
当我在命令行上g++ program.cpp
时 - 而不是从 Python 脚本 - 它会编译。没关系。这很令人沮丧。
编辑:生成的.cpp文件的内容:
#include <iostream>
using namespace std;
int main()
{
cout << "I am a programmer" << endl;
return 0;
}
案例已结案:在我的 Python 程序中,缺少f.close()
。缓冲区未写入program.cpp
。
感谢您的帮助!