メモ:python呼び出しshellとC
2812 ワード
python呼び出しC:
やはりshellはlinux関連を得るのが簡単です.
現在cmdが使いやすいことが分かった.しかし、長いshellコマンドには向いていません.シナリオにしか書けませんね...[一番使いやすい方法は???
pythhonがCを呼び出すと、Cに渡されるパラメータ=======ダイレクトポイントが間違っていることがわかります..文字列受信は可能です.
C++はpython呼び出しのためにsoにコンパイルされ、コマンド:
g++ perm.cpp -fPIC -shared -o perm.so
python
pythonコード:
shell:
Cコード:
やはりshellはlinux関連を得るのが簡単です.
現在cmdが使いやすいことが分かった.しかし、長いshellコマンドには向いていません.シナリオにしか書けませんね...[一番使いやすい方法は???
pythhonがCを呼び出すと、Cに渡されるパラメータ=======ダイレクトポイントが間違っていることがわかります..文字列受信は可能です.
C++はpython呼び出しのためにsoにコンパイルされ、コマンド:
g++ perm.cpp -fPIC -shared -o perm.so
python
pythonコード:
import sys
import os
import glob
import subprocess
import shutil
import traceback
import fcntl
import signal
import ConfigParser
import time
def get_files():
global file
cmd = ["sh", "./test.sh"]
process = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE )
out = process.communicate()
if process.returncode == 0 and out[0].strip() != "NULL":
""" print out
for i in range(len(out)):
print out[i].strip()"""
number_i = out[0].strip()
print number_i
import ctypes
so = ctypes.CDLL("./perm.so")
ret = so.v_perm_v(number_i)
print("the return value is:")
print ret
def main(argv=None):
"""creates a parser for the command line arguments and runs the program for
those arguments"""
get_files()
if __name__ == "__main__":
sys.exit(main())
~
ls /home/vivi | wc -l
shell:
ls /home/vivi | wc -l
Cコード:
#include
#include
#define elemType int
void arrySwap(elemType arr[], elemType a, elemType b)
{
elemType temp;
temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
}
int cnt = 0;
void perm(elemType arr[], int start, int end)
{
if(start == end)
{
cnt++;
printf("%d :/t",cnt);
for(int i = 0; i <= end; i++)
printf("%d ", arr[i]);
printf("
");
}
else
{
for(int i = start; i <= end; i++)
{
arrySwap(arr, start, i);
perm(arr, start + 1, end);
arrySwap(arr, start, i);
}
}
}
extern "C"
{
int v_perm_v(char* len_c)
{
//printf("len_c = %s
",len_c);
int len = (int)(len_c[0] - '0');
//printf("len = %d
", len);
if(len <= 0)
return -1;
int *arr = (int *)malloc(sizeof(int) * len);
if(arr == NULL)
return -1;
for(int i = 0; i < len; i++)
{
arr[i] = i;
//printf("%d ", arr[i]);
}
perm(arr, 0, len - 1);
return 0;
}
}