-1

我的 C 脚本:

/* Hello World program */

#include <stdio.h>

int main() {
   printf("Hello, World! \n");
   return 0;
}

我希望以最简单的方式 Hello, World!直接在我的 Python IDE (Rodeo IDE) 中打印。

到目前为止,我已经提出了以下方法,但它似乎不起作用(而且有点麻烦,因为它需要我去终端):

首先,我gcc helloworld.c在终端中生成可执行文件a.out*,然后执行:

from subprocess import call
call(["./a.out"])

但是我没有打印Hello, World!到 Python 控制台,而是得到了0(这意味着成功)。我怎样才能让 C 输出直接打印到 Python 控制台,我怎样才能进一步简化它(例如,通过避免终端绕道)?我知道我需要先制作可执行文件(这就是我使用终端的原因),但也许在 Python IDE 中有一种更时尚的方法来完成它?

对于想知道 b 代表什么的用户... @happydave 的解决方案在此处进行了测试,并感谢 @Mark Tolonen 解释 b

Python 3.5.2 |Anaconda 4.2.0 (x86_64)| (default, Jul  2 2016, 17:52:12) 
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import subprocess
>>> print(subprocess.check_output("./a.out"))
b'Hello, World! \n'

很奇怪是b从哪里来的……

4

2 回答 2

4

如果你编译 C 脚本(比如 to a.out):

#include <stdio.h>

int main(void) {
   printf("Hello, World! \n");
   return 0;
}

您可以使用CTypes轻松调用它:

# hello.py
import ctypes

beach = "./a.out"
seashell = ctypes.cdll.LoadLibrary(beach)

seashell.main()

调用以下 Python 脚本将调用您main()的 C 脚本:

$ python hello.py
Hello, World!

例如,您可以使用communicate对输出进行子处理和捕获,但无需生成shell 来完成您所追求的。

于 2016-10-14T00:15:54.023 回答
4
>>> import subprocess
>>> subprocess.check_output("./a.out")
'Hello World!\n'

关于你的第二个问题,你也可以使用 subprocess 调用 gcc。在这种情况下,调用可能是正确的使用方法,因为您可能想在运行 a.out 之前检查失败。

这是一个完整的脚本:

import subprocess
status = subprocess.call(["gcc","hello.c"])
if status == 0:
   print(subprocess.check_output("./a.out").decode('utf-8'))
else:
   print("Failed to compile")

你好ç:

#include "stdio.h"
int main() {
   printf("Hello world!"); 
}

输出:世界你好!

于 2016-10-14T00:07:03.240 回答