簡體   English   中英

從Python呼叫C的hello世界

[英]Calling C's hello world from Python

我的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控制台,以及如何進一步簡化它(例如,通過避免終端繞行)? 我知道我需要首先制作可執行文件(這就是為什么要使用Terminal的原因),但是在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來自哪里很奇怪...

>>> import subprocess
>>> subprocess.check_output("./a.out")
'Hello World!\n'

關於第二個問題,您也可以使用子過程調用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!"); 
}

輸出:世界您好!

如果編譯C腳本(例如,到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腳本將在C腳本中調用main()

$ python hello.py
Hello, World!

您可以使用例如communication進行子處理和捕獲輸出,但是無需生成shell即可完成所需的工作。

您可以使用以下代碼將文本直接打印到Python模塊:

print("Hello, world!")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM