質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2775閲覧

c言語からpythonコードを読み込む2

uriuri

総合スコア47

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/29 09:31

PyRun_SimpleString
を使ってpythonのコードをべた書きし、cからpythonを走らせられるかと思い試行錯誤しています
https://blanktar.jp/blog/2013/05/use-python-by-c-lang.html

試しに次のコードをcで実行した結果

c

1 2#include <stdio.h> 3#include <Python.h> 4 5void set_path(void){ 6 PyObject *sys = PyImport_ImportModule("sys"); 7 PyObject *sys_path = PyObject_GetAttrString(sys, "path"); 8 PyObject *dir = PyUnicode_FromString("."); 9 PyList_Append(sys_path, dir); 10} 11 12int main(void){ 13 14 /* pythonインタラプタを初期化 */ 15 Py_Initialize(); 16 set_path(); 17 18 PyRun_SimpleString("def func():"); 19 PyRun_SimpleString("print('this printed by python')"); 20 PyRun_SimpleString("return ('byt, this printed by C')"); 21 /*PyRun_SimpleString("import cv2"); 22 PyRun_SimpleString("im = cv2.imread('teratail.jpg')"); 23 PyRun_SimpleString("cv2.imshow('1', im)"); 24 PyRun_SimpleString("cv2.waitKey()"); 25 PyRun_SimpleString("cv2.destroyAllwindows()"); */ 26 27 28 /* pythonインタラプタを終了 */ 29 Py_Finalize(); 30 return 0; 31 32} 33
File "<string>", line 1 def func(): ^ SyntaxError: unexpected EOF while parsing this printed by python File "<string>", line 1 SyntaxError: 'return' outside function

defで関数を定義した場合PyRun_SimpleStringを使用する際、インデントがなされていないため
SyntaxError: unexpected EOF while parsing
となってしまうのでしょうか?
SyntaxError: 'return' outside function
については以下のサイトから原因はわかりました
しかし対処方法までは...
もしかしたらインデントがないためpythonのreturnとcのreturnが同じ行ということなのでしょうか
http://www.tensorflowz.com/faq/html/Tensorflow_SyntaxError-return-outside-function-6F.html

試しにPyRun_SimpleStringの前にスペースで空白を作ったりdef func():の後ろにスペースを空けたりしたのですがかわりませんでした。

なにか策があれば教えてください

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

python

1 PyRun_SimpleString("def func():\n print('this printed by python')\n return ('byt, this printed by C')"); 2

でどうでしょう。手元でやったらとりあえず無事動きました(質問文のコードは関数を呼び出していないので何の反応もありませんが)。

きもち程度に見やすくしたバージョン(これでも連続した文字列として取り扱われます)。

python

1 PyRun_SimpleString("def func():\n" 2 " print('this printed by python')\n" 3 " return ('byt, this printed by C')");

インタラプタ(interrupter)ではなくインタプリタ(interpreter)です。
(interrupterの和訳は妨害者、さえぎるものなので、今回のケースでは間違いではないかもしれませんが・・・)

投稿2018/09/29 10:58

編集2018/09/29 19:25
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

uriuri

2018/10/01 04:58

丁寧な回答ありがとうございます。 とても参考になりました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問