1樓:育知同創教育
如果要呼叫另乙個python指令碼用import 檔名(不包括.py) ,就可以了,這個指令碼要在pythonpath的路徑下,如當前目錄,非常方便的。
怎樣讓python指令碼與c++程式互相呼叫
2樓:好程式設計師
二、python呼叫c/c++
1、python呼叫c動態鏈結庫
python呼叫c庫比較簡單,不經過任何封裝打包成so,再使用python的ctypes呼叫即可。
(1)c語言檔案:pycall.c
[html] view plain copy
/***gcc -o libpycall.so -shared -fpic pycall.c*/
#include
#include
int foo(int a, int b)
(2)gcc編譯生成動態庫libpycall.so:gcc -o libpycall.
so -shared -fpic pycall.c。使用g++編譯生成c動態庫的**中的函式或者方法時,需要使用extern "c"來進行編譯。
(3)python呼叫動態庫的檔案:pycall.py
[html] view plain copy
import ctypes
ll = ctypes.cdll.loadlibrary
lib = ll("./libpycall.so")
lib.foo(1, 3)
print '***finish***'
(4)執行結果:
2、python呼叫c++(類)動態鏈結庫
需要extern "c"來輔助,也就是說還是只能呼叫c函式,不能直接呼叫方法,但是能解析c++方法。不是用extern "c",構建後的動態鏈結庫沒有這些函式的符號表。
(1)c++類檔案:pycallclass.cpp
[html] view plain copy
#include
using namespace std;
class testlib
; void testlib::display()
int main()
char *reverse(char *s)
return(s);
} int main()
上述**中有兩個函式,乙個是遞迴求階乘的函式fac();另乙個reverse()函式實現了乙個簡單的字串反轉演算法,其主要目的是修改傳入的字串,使其內容完全反轉,但不需要申請記憶體後反著複製的方法。
(2)用樣板來包裝**
介面的**被稱為「樣板」**,它是應用程式**與python直譯器之間進行互動所必不可少的一部分。樣板主要分為4步:a、包含python的標頭檔案;b、為每個模組的每乙個函式增加乙個型如pyobject* module_func()的包裝函式;c、為每個模組增加乙個型如pymethoddef modulemethods的陣列;d、增加模組初始化函式void initmodule()。
怎樣用perl指令碼呼叫python指令碼並傳遞引數
3樓:du知道君
舉例:shell的指令碼:t.
sh內容:echo "this is a test shell with arguments"echo "arg1 = $1; arg2 = $2;"執行指令碼./t.
sh zhao結果如下:[noncode@gnode108 knockdown_workflow]$ ./t.
sh zhao1 zhao2this is a test shell with argumentsarg1 = zhao1; arg2 = zhao2;python指令碼:[noncode@gnode108 knockdown_workflow]$ cat t.py #!
/usr/bin/env pythonimport osimport sysdef main():print 'hello world!'if len(sys.
argv) < 2 : print "usage:%s config log" %(sys.
argv[0]) sys.exit(1)arg0 = sys.argv[0]arg1 = sys.
argv[1]print "arg0 = %s; arg1 = %s" % (arg0, arg1) print "test ./t.sh:
"os.system('./t.
sh ' + arg0 + ' ' + arg1)print "test method of replacing: "t = 't.sh'm = 'zhao'n = 'zhao'cmd = ".
/%s %s %s" % (t,m,n)print "t = %s; m = %s; n = %s; cmd = %s" % (t,m,n,cmd)os.system(cmd)if __name__ == '__main__':main()執行指令碼:
python t.py t.sh執行結果:
[noncode@gnode108 knockdown_workflow]$ python t.py t.shhello world!
arg0 = t.py; arg1 = t.shtest .
/t.sh: this is a test shell with argumentsarg1 = t.
py; arg2 = t.sh;test method of replacing: t = t.
sh; m = zhao; n = zhao; cmd = ./t.sh zhao zhaothis is a test shell with argumentsarg1 = zhao; arg2 = zhao;[noncode@gnode108 knockdown_workflow]$ cat t.
sh echo "this is a test shell with arguments"echo "arg1 = $1; arg2 = $2;"[noncode@gnode108 knockdown_workflow]$ ./t.sh zhao1 zhao2this is a test shell with argumentsarg1 = zhao1; arg2 = zhao2;說明:
兩種方法使用python指令碼呼叫shell指令碼:第一種方法:os.
system('./t.sh ' + arg0 + ' ' + arg1)注:.
/t.sh後面有乙個空格,不同的第二種方法:t = 't.
sh'm = 'zhao'n = 'zhao'cmd = "./%s %s %s" % (t,m,n)print "t = %s; m = %s; n = %s; cmd = %s" % (t,m,n,cmd)os.system(cmd)注:
在之前把字串聚合到一起。
shell指令碼裡怎樣在呼叫python時傳引數
4樓:育知同創教育
python 可以利用 sys.argv 拿到命令列上的 arguments:
$ python test.py 1 2 3
test.py:
import sys
print(sys.argv)
結果:['test.py', '1', '2', '3']
所以你在 build_using_xctool.sh 中可以這樣排程 python:
python /users/gyd/desktop/auto_send_email.py subject msg toaddrs fromaddr **tpaddr password
然後在 auto_send_email.py 中:
import sys # 自己 import sys...if __name__ == '__main__':
sendmail(*sys.argv[1:])
5樓:局詩奇友安
||是重定向嘛,
echo
'asdfadsf'
先是將'asdfadsf'輸出到標準輸出也就是螢幕然後|將echo的輸出轉到
logcat.py
作為logcat.py
的輸入,也就等於是將
'asdfadsf'
作為logcat.py的輸入引數
怎麼在python指令碼裡呼叫另python指令碼
from 指令碼名 import 若還是不能調,則把類例項化一下 f 類名 然後f.函式名 就能調了。怎麼在python指令碼裡面呼叫另外乙個帶引數的指令碼?一般情況下都是通過import指令碼,然後直接呼叫指令碼裡的函式,呼叫函式就可以直接傳遞引數 因為python並不像c語言那樣有main函式。...
怎樣在ecel中使用python指令碼
datanitro bai 1 怎樣在 duexcel中使 用zhi 如何通過html來執行python指令碼?按照你的需求,來乙個是要 自做個書籍搜尋引擎,這 bai簡單,自己建好書du籍的資料庫,用 django 的orm,根zhi據dao關鍵字模糊查詢,前端隨便用個非同步的庫,發請求非同步與後...
小白關於python的問題,小白關於python的乙個問題
試了下是可以執行的,確認一下縮排有沒有錯,建議falg 1下面加個break,python小白的問題 首先復python中不存在指標。如果非要制說有,那麼python的一切變數全是指標 比如a 1,python會在某處建立了整數1,然後把a指向這裡 open返回的一般稱為檔案物件。這就是python...