質問するログイン新規登録

質問編集履歴

1

情報の追加

2018/05/13 02:16

投稿

Reach
Reach

スコア735

title CHANGED
File without changes
body CHANGED
@@ -14,4 +14,79 @@
14
14
  実行可能となりましたが もっと スマートな 解決方法は ありませんでしょうか?
15
15
 
16
16
 
17
- また 上記方法は Pythonが ない環境で 動作させることは 可能でしょうか?
17
+ また 上記方法は Pythonが ない環境で 動作させることは 可能でしょうか?
18
+
19
+ 追記:
20
+ 環境
21
+ python 3.5.3 (Version)
22
+ Windows 7 64bit
23
+
24
+
25
+ 試したコード
26
+
27
+ ```c++
28
+ #include<stdio.h>
29
+ #include<Python.h>
30
+ #include<string>
31
+ #include<iostream>
32
+
33
+
34
+ int main(){
35
+ PyObject *pName,*pModule, *pTmp, *pFunc;
36
+ PyObject *pArgs, *pValue;
37
+ double res_data;
38
+ double a = 10.5;
39
+
40
+ //最初に必ず入れる
41
+ Py_Initialize();
42
+
43
+ //カレントディレクトリを探す範囲にいれる-------------------------
44
+ PyObject *sys = PyImport_ImportModule("sys");
45
+ PyObject *path = PyObject_GetAttrString(sys, "path");
46
+ PyList_Append(path,PyUnicode_DecodeFSDefault("."));
47
+ //---------------------------------------------------------------
48
+
49
+ //探すファイルをしてい-------------------------------------------
50
+ pName = PyUnicode_DecodeFSDefault("py_test2");
51
+ pModule = PyImport_Import(pName);
52
+ Py_DECREF(pName);
53
+ //---------------------------------------------------------------
54
+
55
+ //タプルの作成 -----------------------------------------------
56
+ pArgs = PyTuple_New(1);//タプルを新しく作成する
57
+ pValue = PyFloat_FromDouble(a);//pValueにaの数値を設定
58
+ PyTuple_SetItem(pArgs,0,pValue);//タプルの0の位置にpValueを設定
59
+ //---------------------------------------------------------------
60
+
61
+ if(pModule != NULL){
62
+
63
+ //pFuncに今回呼び出す関数を設定する(今回はfunc)
64
+ pFunc = PyObject_GetAttrString(pModule, "func");
65
+
66
+ //pFuncを引数を与える(pArgsはタプルでなければならない)
67
+ pTmp = PyObject_CallObject(pFunc, pArgs);
68
+
69
+ //関数を実行 d:double型を受け取る
70
+ PyArg_Parse(pTmp, "d", &res_data);
71
+ printf("%f\n",res_data);
72
+ }
73
+ //最後に必ず入れる
74
+ Py_Finalize();
75
+
76
+ return 0;
77
+ }
78
+ ```
79
+
80
+ ```Python
81
+ #py_test2.py
82
+
83
+ import random
84
+ def func(data):
85
+ print("hogehoge")
86
+ a = data
87
+ print(a)
88
+ list_data = [14,2,3.5,28]
89
+ list_data.append(a)
90
+ b = random.choice(list_data)
91
+ return b
92
+ ```