2016-11-23 6 views
0

私はAnacondaを使用しています。環境を使ってsqlite3をインストールしました。PythonスクリプトがC++から呼び出されたときにSQLite3がエラーなしで無視される

私はIDEでスクリプトを実行すると、問題なくDBを作成して移植します。

スクリプトをC++から実行すると、SQLite3の部分は無視され、エラーは発生せず、データベースも作成または移入されません。私はスクリプトがC++から呼び出されたときに実行されることは分かっています。なぜなら、他の部分はまだ機能しているからですが、SQLiteの部分は無視されるだけです。

C++部分:何が起こっている

import math 
import sys 
import sqlite3 
from pathlib import Path 


conn = sqlite3.connect('CoSimTest.db') 
c = conn.cursor() 

def create_table(): 
    c.execute('CREATE TABLE IF NOT EXISTS PowerSysInfo(time REAL, NumOfNodes INT, NumOfBuses INT, BusLocation TEXT, PhaseNumber INT, v1 REAL, a1 REAL, phase1 INT, v2 REAL, a2 REAL, phase2 INT, v3 REAL, a3 REAL, phase3 INT)') 

create_table() 

string command = "C:\\Anaconda3\\python.exe C:\\CoSim2\\PYTHON\\python\\MainMaster.py " + std::to_string(minute); 

Pythonの一部? IDEでスクリプトを実行するのはどうしてうまくいくのですか?C++で.pyを実行すると、エラーなしでSQLiteの部分が無視されます。

+0

私はデバッガで追加する必要があります:sqlite3._version_は与えます:*** AttributeError:モジュール 'sqlite3'には属性 '_version_'がありません – WBig

+0

現在のディレクトリとは何ですか? –

+0

スパイダーで? cwd = os.getcwd()。作業ディレクトリはC:\\ CoSim2 \\ PYTHON \\ python \\です。それはあなたが意味することですか? C++が実行されているOMNeT ++では、 'workspace'はC:\\ CoSim2なので、すごくいいはずですか? – WBig

答えて

0

だから私は自分自身の質問に解決策を投稿したいと思っていました。 conn = sqlite3.connect('CoSimTest.db')は、ローカルディレクトリがideから実行されていないときに変更されるため、フルパスが必要です。

0

Pythonスクリプトを実際に起動する方法を教えてもらえません。コマンドラインに入力する内容を複製する文字列があります(これはstd::to_string(minute)の部分であると仮定していますが)。実際にスクリプトをどのように実行しているかによって、起動パラメータが異なって入力されることがあります。

あなたの引数が実際にpythonスクリプトによって確認されていることを確認してください。

作業ディレクトリがIDEで使用されているものと同じであることを確認してください。

+0

引数はプログラム内の時間を単に渡すことです(OMNeT ++ 4.3)。これは、後で他のものをシミュレートし、データベースを移植するためのpythonスクリプトで使用されます。しかし、例えば、IDEでスクリプトを実行しても、後でrequiretime = float(sys.argv [1])を残しても、入力された引数がないというエラーを出す前にDBを作成します。だから私はこれが議論とは関係ないとは思わない? – WBig

+0

もっと明確にするために、私はtxtファイルでそれらを記録しているので、議論が見られています。これは、スクリプトが動作していて、呼び出されていることを知る方法ですが、SQLiteの側面は単に無視されています。 IDEでrunscriptと同じようにDBを作成することさえありません – WBig

+0

IDEと同じ作業ディレクトリを使用していますか? – Software2

関連する問題