В 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;
}