[解決済み] 3.3でPythonモジュールをロードするとき、PyString_AsStringの代わりに何を使えばいいですか?
2022-02-25 05:26:29
質問
私は、次の関数を使用して、C++プログラムの1つでpythonから関数をロードしようとしています。
char * pyFunction(void)
{
char *my_result = 0;
PyObject *module = 0;
PyObject *result = 0;
PyObject *module_dict = 0;
PyObject *func = 0;
PyObject *pArgs = 0;
module = PyImport_ImportModule("testPython");
if (module == 0)
{
PyErr_Print();
printf("Couldn't find python module");
}
module_dict = PyModule_GetDict(module);
func = PyDict_GetItemString(module_dict, "helloWorld");
result = PyEval_CallObject(func, NULL);
//my_result = PyString_AsString(result);
my_result = strdup(my_result);
return my_result;
}
PyString_AsString の代わりに何を使うべきですか?
どのように解決するのですか?
からの戻り値の型に応じて
helloWorld()
関数では
は異なる可能性があるので、確認したほうがよいでしょう。
返された
str
(Python 2
unicode
) の場合は
をエンコードします。エンコーディングはユースケースによりますが、ここでは
はUTF-8を使用します。
if (PyUnicode_Check(result)) {
PyObject * temp_bytes = PyUnicode_AsEncodedString(result, "UTF-8", "strict"); // Owned reference
if (temp_bytes != NULL) {
my_result = PyBytes_AS_STRING(temp_bytes); // Borrowed pointer
my_result = strdup(my_result);
Py_DECREF(temp_bytes);
} else {
// TODO: Handle encoding error.
}
}
を処理するために
bytes
(Python 2
str
) を取得することができます。
の文字列を直接指定することができます。
if (PyBytes_Check(result)) {
my_result = PyBytes_AS_STRING(result); // Borrowed pointer
my_result = strdup(my_result);
}
また、文字列でないオブジェクトを受け取った場合、それを変換して を使って PyObject_Repr() , PyObject_ASCII() , PyObject_Str() または PyObject_Bytes() .
というわけで、最終的には、おそらく次のようなものが欲しいのでしょう。
if (PyUnicode_Check(result)) {
// Convert string to bytes.
// strdup() bytes into my_result.
} else if (PyBytes_Check(result)) {
// strdup() bytes into my_result.
} else {
// Convert into your favorite string representation.
// Convert string to bytes if it is not already.
// strdup() bytes into my_result.
}
関連
-
python implement mysql add delete check change サンプルコード
-
PythonによるExcelファイルの一括操作の説明
-
[解決済み】SyntaxError: デフォルト以外の引数がデフォルトの引数に続く
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] モジュールの関数名(文字列)を使って、モジュールの関数を呼び出す。
-
[解決済み] スマートポインターとは何ですか?
-
[解決済み] 仮想デストラクタはいつ使うのか?
-
[解決済み] Python 3 の "python -m SimpleHTTPServer" に相当するものは何ですか?
-
[解決済み] Pythonの "assert "はどのように使うのですか?
-
[解決済み] Pythonで**kwargsを使用する正しい方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
python string splicing.join()とsplitting.split()の説明
-
Python 人工知能 人間学習 描画 機械学習モデル作成
-
PicgoのイメージベッドツールをPythonで実装する
-
Python jiabaライブラリの使用方法について説明
-
pyCaret効率化乗算器 オープンソース ローコード Python機械学習ツール
-
任意波形を生成してtxtで保存するためのPython実装
-
FacebookオープンソースワンストップサービスpythonのタイミングツールKats詳細
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み] builtins.TypeError: strでなければならない、bytesではない
-
[解決済み】Python: OverflowError: 数学の範囲エラー