當前位置:首頁 » 編程語言 » c執行python

c執行python

發布時間: 2022-12-13 18:49:25

python中執行系統命令常見的幾種方法

作為膠水語言,Python可以很方便地執行系統命令,從而幫助我們快速的完成任務;而且Python執行系統命令可採用的方法有很多,本文重點介紹一下:os.system()、os.popen()和subprocess模塊。
1. os.system()
這個方法直接調用標准C的system()函數,僅僅在一個子終端運行系統命令,而不能獲取執行返回的信息。
>>> import os
>>> output = os.system('cat /proc/cpuinfo')
processor : 0
vendor_id : AuthenticAMD
cpu family : 21
... ...
>>> output # doesn't capture output
0
2. os.popen()
這個方法執行命令並返回執行後的信息對象,是通過一個管道文件將結果返回。
>>> output = os.popen('cat /proc/cpuinfo')
>>> output
>>> print output.read()
processor : 0
vendor_id : AuthenticAMD
cpu family : 21
... ...
>>>
3. subprocess模塊
該模塊是一個功能強大的子進程管理模塊,是替換os.system, os.spawn*等方法的一個模塊。
>>> import subprocess
>>> subprocess.Popen(["ls", "-l"]) # python2.x doesn't capture
output
>>> subprocess.run(["ls", "-l"]) # python3.x doesn't capture
output
>>> total 68
drwxrwxr-x 3 xl xl 4096 Feb 8 05:00 com
drwxr-xr-x 2 xl xl 4096 Jan 21 02:58 Desktop
drwxr-xr-x 2 xl xl 4096 Jan 21 02:58 Documents
drwxr-xr-x 2 xl xl 4096 Jan 21 07:44 Downloads
... ...
>>>

Ⅱ 如何實現 C/C++ 與 Python 的通信

屬於混合編程的問題。較全面的介紹一下,不僅限於題主提出的問題。

以下討論中,Python指它的標准實現,即CPython(雖然不是很嚴格)

本文分4個部分

C/C++ 調用 Python (基礎篇)— 僅討論Python官方提供的實現方式
Python 調用 C/C++ (基礎篇)— 僅討論Python官方提供的實現方式
C/C++ 調用 Python (高級篇)— 使用 Cython
Python 調用 C/C++ (高級篇)— 使用 SWIG

練習本文中的例子,需要搭建Python擴展開發環境。具體細節見搭建Python擴展開發環境 - 蛇之魅惑 - 知乎專欄

1 C/C++ 調用 Python(基礎篇)
Python 本身就是一個C庫。你所看到的可執行體python只不過是個stub。真正的python實體在動態鏈接庫里實現,在Windows平台上,這個文件位於 %SystemRoot%\System32\python27.dll。

Ⅲ 為什麼c語言運行比python快

眾所周知,python執行速度比c慢。原因為何?
python的傳統運行執行模式:錄入的源代碼轉換為位元組碼,之後位元組碼在python虛擬機中運行。代碼自動被編譯,之後再解釋成機器碼在CPU中執行。
c編譯器直接把c源代碼編譯成機器碼。過程比python執行過程少了位元組碼生成和虛擬機執行位元組碼過程。所以自然比python快。
Python運行執行過程如下圖:
補充說明:
1.位元組碼不同於機器碼,是特定於python的一種表現形式。
2.PVM是Python Virtual Machine的簡寫,即python虛擬機。
更多Python相關技術文章,請訪問Python教程欄目進行學習!以上就是小編分享的關於為什麼c語言運行比python快的詳細內容希望對大家有所幫助,更多有關python教程請關注環球青藤其它相關文章!

Ⅳ python與c語言的關系

1、語言類型不同
Python是一種動態類型語言,又是強類型語言;C語言是靜態類型語言,在編譯期間就確定數據類型的語言;
2、內存管理不同
Python使用自動垃圾收集器進行內存管理;C語言中程序員必須自己進行內存管理;
3、對象機制不同
Python所有的數據,都是由對象或者對象之間的關系表示的,函數是對象,字元串是對象,每個東西都是對象的概念;C語言中沒有對象這個概念,只有數據的表示。
4、運行效率不同
Python有一個GIL鎖,導致其對多線程支持不夠好,運行速度比較慢;C語言比較快,是很好的底層語言,運行效率上優於Python。
5、變數類型不同
Python有六個標準的數據類型,包含Number數字、String字元串、List列表、Tuple元祖、Sets集合、Dictionary字典;數字類型有四種,包含:整數、布爾型、浮點數和復數。C語言也分為四大類,其中包含基本類型、枚舉類型、void的類型、派生類型,基本類型包含整數類型、浮點類型。
6、函數庫的使用方法不同
C語言中使用庫函數,需要引入頭文件用include引入;Python中需要引入別的模塊或者函數時需要用import引入。

Ⅳ c語言和python區別

具體區別有三方面:

一、語言不同。

其中C++語言屬於編譯型語言,程序在執行之前需要一個專門的編譯過程,把程序編譯成為機器語言的文件。

Python語言是解釋型語言,該語言編寫的程序不需進行預先編譯,以文本方式儲存代碼,會將代碼一句一句直接運行。

二、時間點不同。

兩者區別在於翻譯時間點不同。C++在前,而Python在後。

三、兼容性不同。

Python解釋器易於擴展,可以使用C或C++(或者其他可以通過C調用的語言)擴展新的功能和數據類型。

Python 也可用於可定製化軟體中的擴展程序語言。Python豐富的標准庫,提供了適用於各個主要系統平台的源碼或機器碼。

原理方面:

1、運行效率:C++ >> Python。

Python代碼和C++最終都會變成CPU指令來跑,但一般情況下,比如反轉和合並兩個字元串,Python最終轉換出來的CPU指令會比C++ 多很多。

首先,Python東西比C++多,經過了更多層,Python中甚至連數字都是object。

其次,Python是解釋執行的,和物理機CPU之間多了解釋器這層,而C++是編譯執行的,直接就是機器碼,編譯的時候編譯器又可以進行一些優化。

2、開發效率:Python >> C++。

Python一兩句代碼就搞定的東西,C++往往要寫一大堆。用C++解析下Json你就明白了,很可能好幾天過去了,你還在調bug,剛調好bug又內存泄漏了。

Ⅵ C語言程序如何調用python程序

下面是一個例子:
首先是python的一個簡單函數
class Hello:
def __init__(self, x):
self.a = x
def print(self, x=None):
print(x)
def xprint():
print("hello world")
if __name__ == "__main__":
xprint()
h = Hello(5)
h.print()1

下面是C語言
#include <python3.4m/Python.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
Py_Initialize();
// 將當前目錄加入sys.path
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");
// 導入hello.py模塊
PyObject *pmole = PyImport_ImportMole("hello");
// 獲得函數xprint對象,並調用,輸出「hello world\n」
PyObject *pfunc = PyObject_GetAttrString(pmole, "xprint");
PyObject_CallFunction(pfunc, NULL);
// 獲得類Hello並生成實例pinstance,並調用print成員函數,輸出「5 6\n」
PyObject *pclass = PyObject_GetAttrString(pmole, "Hello");
PyObject *arg = Py_BuildValue("(i)", 5);
PyObject *pinstance = PyObject_Call(pclass, arg, NULL);
PyObject_CallMethod(pinstance, "print", "i", 6);
Py_Finalize();
return 0;
}
編譯命令如下:
gcc pyapi.c -lpython3.4m -o pyapi

Ⅶ 運行python程序的兩種方式

運行python程序的兩種方式是什麼?python有兩種運行方式:互動式和腳本式。互動式可以通過cmd命令行窗口或者IDEL實現,而腳本式通過寫一個腳本(.py結尾的文檔)實現。其中互動式主要用於簡單的python運行或者測試調試python時用到,而腳本式是運行python程序的主要方法。

第一,互動式,通過Windows命令行工具進行互動式運行python。同時按下Windows鍵和R鍵,啟動「運行」,在「運行」中輸入cmd然後回車,即彈出命令行工具,然後輸入python回車,即出現如下界面。

第二,然後輸入print('Helloworld!'),既可以敲一行代碼,與python交互一次,python執行一次。

第三,通過IDEL互動式運行python。從「開始」中找到Python->IDEL,如下圖。

第四,啟動IDEL後,同樣輸入print('Helloworld!'),既可以敲一行代碼,與python交互一次,python執行一次。只不過IEDL中python代碼可以高亮顯示。

第五,腳本式運行python,在IDEL中點擊file->newfile,就會彈出一個未命名(Untitled)的腳本窗口,然後輸入如下代碼,並按Ctrl+S保存。

#20181216攝氏溫度和華氏溫度之間轉換

t=input('請輸入帶有單位符號的溫度(例如37C或者100F):')

ift[-1]in('f','F'):

C=(eval(t[:-1])-32)/1.8 #如果輸入為華氏溫度,那麼轉換為攝氏溫度

print('轉變為攝氏溫度%.2fC為:'%C)

elift[-1]in('c','C'):

F=eval(t[:-1])*1.8+32 #如果輸入為攝氏溫度,那麼轉換為華氏溫度

print('轉變為華氏溫度%.2fF為:'%F)

else:

print('輸入格式有誤,請輸入帶有單位符號的溫度(例如37C或者100F):')

第六,按F5運行上一步保存的***.py腳本,就會出現如下界面,提示:請輸入帶有單位符號的溫度(例如37C或者100F),隨便輸入一下就行,即通過腳本運行了python。

那麼,有關運行python程序的兩種方式的內容,小編就介紹到這里了。小夥伴們可以用心了解一下哦!

本篇文章使用以下硬體型號:聯想小新Air15;系統版本:win10;軟體版本:python3.0。

Ⅷ C語言和python語言有很多相似嗎

一、語言類型不同C語言是比較古老的語言,並沒有太多高級語言的特性,在語言類型上他屬於編譯型語言,何為編譯型語言,編譯型語言就是經過了軟體的編譯後,生成機器碼,然後再由計算機操作系統去運行,他的優點就是執行速度很快,因為他是最接近計算機底層的語言,和計算機交互的時候,效率是很高的,他的缺點就是由於依賴底層的操作系統,所以並不能跨平台,無法做到一處代碼,處處編譯,他一般用於操作系統或者是驅動等底層的開發,是大學計算機的必修課。而Python或者Java這種屬於高級語言,Java是屬於解釋型語言,但是Python好像介於兩者之間,界限並不是劃分的特別明顯,但是他總體來說屬於解釋型語言,因為他有一個虛擬機,這個虛擬機就導致了Python可以跨平台,無論是哪個操作系統,只要你在有虛擬機的操作系統就可以運行Python代碼,所以Python跟適合做軟體的開發。二、數據類型的不同<img src="https://pic1.mg.com/50/v2-_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="554" data-rawheight="348" data-default-watermark-src="https://picx.mg.com/50/v2-_720w.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="554" data-original="https://picx.mg.com/v2-_r.jpg?source=1940ef5c"/>我們用一張圖概括了C語言的數據類類型、構造類型、指針類型、空類型,C語言在定義變數的時候一定要先聲明變數的類型,告訴計算機,我是一個什麼類型,然後計算機就會在內存中開辟對應的內存空間,我們以整型為例,計算機會在內存中開辟4個位元組的空間,這個空間主要用於初始化,由於在一開始我們就制定了長度,所以我們在運算的時候需要格外小心,需要考慮到內存是否夠用等溢出問題。<img src="https://pic1.mg.com/50/v2-_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="553" data-rawheight="243" data-default-watermark-src="https://picx.mg.com/50/v2-_720w.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="553" data-original="https://picx.mg.com/v2-_r.jpg?source=1940ef5c"/>我們再來看看Python的數據類型,可以發現大體上沒有太大的區別,,Python封裝了一些高級的數據類型,比如元組、字典等,Python對比C語言最大的優勢在於定義變數的時候不需要事先聲明變數的類型,比如我們定義一個整型變數age=18,首先計算機會是在內存中開辟一塊內存來存儲18,然後將age指向18,變數age是沒有類型之分的,這樣做的就比較友好了,我們不需要考慮變數的類型,也就無需考慮在運算過程中是否會溢出的問題。三、便利性的不同Python語言之所能夠火出圈,最大的原因還是因為他簡單,Python語言簡便的語法和豐富的類庫讓很多零基礎的小白感受到了開發的魔力,Python有很多很強大的內置函數,我們只需要在需要用到的時候import,這些豐富的類庫在Python中稱為模塊,像OS模塊、time模塊、random模塊等基礎模塊,我們可以使用一行甚至幾行代碼就可以實現C語言幾百行的效果。而Python這么多模塊之間也有弊端,那就是模塊之間的引用問題,會出現各種報錯,一般管理模塊之間的關系我們可以使用pip來便捷管理。反觀C語言,他由於出生的時間比較早,沒有強大的類庫,導致我們很多的時候很多基礎類庫需要自己寫,我們在學習C語言的時候還記得需要引用很長一串頭文件,這些原因都是制約C語言發展的原因。不過C語言的這個特性可以讓開發者開發出更適合性能更高的一些內置函數。四、編程思維的不同C語言和Python另一個本質的區別就是編程的思維不同,簡單來說就是C語言是面向過程的語言,而Python是面向對象的語言。面向過程強調的是我該怎麼去做。即功能的執行過程,即先幹啥,後幹啥。在面向過程中,我們會寫很多的函數,每一個函數負責完成某一個功能,而向過程的設計思想存在以下幾個缺陷:系統軟體適應性差,可拓展性差,維護性低。<img src="https://picx.mg.com/50/v2-_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="283" data-rawheight="104" data-default-watermark-src="https://picx.mg.com/50/v2-_720w.jpg?source=1940ef5c" class="content_image" width="283"/>面向對象的一種思維方式是對面向過程的一種改進,作為新式的編程思想,是站在對象的角度思考問題,我們把多個功能合理的放到不同對象里,強調的是我該讓誰來做。想吃飯讓阿姨做,想寫代碼僱傭程序員,不需要自己手動去做。面向對象最小的程序單元是類,必須先存在類的定義,再有對象,而具備某種功能的實體,稱為對象。<img src="https://picx.mg.com/50/v2-_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="583" data-rawheight="328" data-default-watermark-src="https://picx.mg.com/50/v2-_720w.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="583" data-original="https://picx.mg.com/v2-_r.jpg?source=1940ef5c"/>面向過程和面向對象各有千秋,面向對象更符合我們常規的思維方式,穩定性好,可重用性強,易於開發大型軟體產品,有良好的可維護性,他有三大特徵:繼承、封裝、多態。五、其他的不同Python和C還有其他的不同,主要體現在開發的舒適度,在學習Python的時候,我們可以使用Python自帶的圖形化界面來編程,有點類似Linux的界面,這種界面交互性良好,使用簡單的命令就可以進入和退出,進一步降低了學習成本,而C語言的編譯器屈指可數,最開始使用的是Dev-C++這種交互性極差,UI極具年代感的產品,接著是微軟的Microsoft Visual studio雖然在功能和交互上進行了升級,但是還是感覺有年代感,不如Python那麼智能。說到Python就不得不提PyCharm,這種交互性極好UI美觀的產品真的是會讓人愛上編程,雖然他很吃內存,但是我們也可以使用VsCode這種輕量級的產品。此外,Python通過縮進來表示語句,減少了不必要的代碼,提高了可讀性和舒適度,讓代碼看起來更加美觀,而C語言是使用{},這些小的語法的區別都彰顯了Python語言的高級特性。總結以上說了那麼多Python和C的不同,總結來說就是C語言是很基礎的語言,就好比我們在小學的時候學習的加減乘除,是為以後學習解一元二次方程、橢圓方程等高級題目做准備的,學C語言也一樣,是基礎,是我們入門編程的第一課,讓我們體會到什麼是變數、什麼是方法、函數,所以我認為C語言更適合做入門的語言。<img src="https://picx.mg.com/50/v2-_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="554" data-rawheight="350" data-default-watermark-src="https://picx.mg.com/50/v2-_720w.jpg?source=1940ef5c" class="origin_image zh-lightbox-thumb" width="554" data-original="https://picx.mg.com/v2-_r.jpg?source=1940ef5c"/>而Python作為高級語言,吸收了C語言的一些好的地方,同時改進了C語言的不足,取其精華去其糟粕,所以讓Python變得更加智能,雖然代碼量少了,更簡單了,但是程序員不是工具人,是魔術師,我們需要去了解底層才能讓我們走的更遠更高。

Ⅸ python 調用C可執行程序

比如參數是ARG1,ARG2,輸入字元串是TEST

import subprocess as sub
p = sub.Popen(['alignment ARG1 ARG2'], shell = True, stdin = sub.PIPE, stdout = sub.PIPE, stderr = sub.PIPE)
(out,err) = p.communicate(input = 'TEST')

out是執行後的標准輸出

「問題補充:那個C可執行程序需要CTRL + C 才能退出,就不知道該怎麼辦了」

可以發送SIGINT信號給可執行程序
Popen.send_signal(signal)

等同於ctrl + c

Ⅹ 求助 關於c程序中嵌入Python的問題

嵌入
與python的擴展相對,嵌入是把Python解釋器包裝到C的程序中。這樣做可以給大型的,單一的,要求嚴格的,私有的並且(或者)極其重要的應用程序內嵌Python解釋器的能力。一旦內嵌了Python,世界完全不一樣了。

C調用python中的函數:
hw.py:

#coding=utf8

def hw_hs(canshu):
return canshu

if __name__ == "__main__":
ccss = "I am hw"
print hw_hs(ccss)

helloWorld.py:

#coding=utf8
import hw

def hello():
ccss = "I am helloWorld"
return hw.hw_hs(ccss)

if __name__ == "__main__":
print hello()

testcpypy.c:

//#include "testcpypy.h"
#include <Python.h>
#include <stdio.h>
#include <stdlib.h>

int main()
{
//初始化Python
Py_Initialize();
if (!Py_IsInitialized()) {
printf("Py_Initialize");
getchar();
return -1;
}

//執行python語句
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");

PyObject *pMole = NULL;
PyObject *pFunc = NULL;
PyObject *reslt =NULL;

//載入python模塊
if(!(pMole = PyImport_ImportMole("helloWorld"))) {
printf("PyImport_ImportMole");
getchar();
return -1;
}

//查找函數
pFunc = PyObject_GetAttrString(pMole, "hello");
if ( !pFunc || !PyCallable_Check(pFunc) )
{
printf("can't find function [hello]");
getchar();
return -1;
}

//調用python中的函數
reslt = (PyObject*)PyEval_CallObject(pFunc, NULL);
//printf("function return value : %d\r\n", PyInt_AsLong(reslt));

//將python返回的對象轉換為C的字元串
char *resltc=NULL;
int res;
res = PyArg_Parse(reslt, "s", &resltc);
if (!res) {
printf("PyArg_Parse");
getchar();
return -1;
}
printf("resltc is %s", resltc);
getchar();

//釋放內存
Py_DECREF(reslt);
Py_DECREF(pFunc);
Py_DECREF(pMole);

//關閉python
Py_Finalize();

return 0;
}

編譯:
gcc -o testcpypy testcpypy.c -IC:\Python27\include -LC:\Python27\libs -lpython27 ---C:\Python27為python安裝目錄
或:
gcc -c testcpypy.c -IC:\Python27\include
gcc -o testcpypy.exe testcpypy.o -LC:\Python27\libs -lpython27
執行結果:

帶參數的情況:

#include "callpydll.h"
#include "Python.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdarg.h>

int callhello(char *instr, char *outstr)
{

PyObject *pMole = NULL;
PyObject *pFunc = NULL;
PyObject *reslt = NULL;
PyObject *pParm = NULL;

char *resltc = NULL;
int resltn;
int res;

char *helloWorld = "TestIM_ProtocBuf";

char *im_account = "aaaa";
char *auth_code = "aaaa";
char *im_uid = "aaaa";
char *proxy_topic = "";

//初始化Python
Py_Initialize();
if (!Py_IsInitialized()) {
printf("Py_Initialize");
getchar();
return -1;
}

//執行python語句
PyRun_SimpleString("import sys");
PyRun_SimpleString("sys.path.append('./')");

//載入python模塊
if(!(pMole = PyImport_ImportMole(helloWorld))) {
printf("PyImport_ImportMole");
getchar();
return -2;
}

//查找函數
pFunc = PyObject_GetAttrString(pMole, "login_proxy_body_serialize");
if ( !pFunc || !PyCallable_Check(pFunc) )
{
printf("can't find function [hello]");
getchar();
return -3;
}

//參數轉換C --> python, 參數必須是元組(一個參數也是,否則會失敗!!!坑啊)
pParm = Py_BuildValue("(ssss)", im_account, auth_code, im_uid, proxy_topic);

//調用python中的函數
reslt = (PyObject*)PyEval_CallObject(pFunc, pParm);

//將python返回的對象轉換為C的字元串
res = PyArg_ParseTuple(reslt, "si", &resltc, &resltn);
if (!res) {
printf("PyArg_Parse");
getchar();
return -4;
}

printf("resltn is %d", resltn);
memcpy(outstr, resltc, strlen(resltc)+1);

//釋放內存
Py_DECREF(reslt);
Py_DECREF(pFunc);
Py_DECREF(pMole);
Py_DECREF(pParm);

//關閉python
Py_Finalize();

return 0;
}

int main() {
int i;
char *dais = "iammain";
char res[10240];
memset(res,'\0',sizeof(res));

i = callhello(dais, res);
if(0 != i) {
printf("Notify:error");
getchar();
return -1;
}
printf("result is %s", res);
getchar();
return 0;
}

熱點內容
xlc編譯選項 發布:2025-01-23 02:11:25 瀏覽:720
電腦訪問存儲伺服器硬碟 發布:2025-01-23 02:08:29 瀏覽:568
lol破解腳本 發布:2025-01-23 02:07:54 瀏覽:129
演算法是步驟 發布:2025-01-23 01:47:22 瀏覽:237
ip訪問控制實驗 發布:2025-01-23 01:41:51 瀏覽:105
crv20萬能落地什麼配置 發布:2025-01-23 01:35:33 瀏覽:172
s10手機怎麼查配置 發布:2025-01-23 01:34:48 瀏覽:890
九陰真經3d免費腳本 發布:2025-01-23 01:33:47 瀏覽:686
gcc編譯分為哪幾個階段 發布:2025-01-23 01:33:45 瀏覽:806
戰地5怎麼看哪個伺服器 發布:2025-01-23 01:33:07 瀏覽:367