在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;
}
答案 0 :(得分:1)
案例关闭:在我的Python程序中,f.close()
丢失了。缓冲区未写入program.cpp
。
感谢您的帮助!