2015-04-28 60 views
0

我從Visual C#窗體調用python文件。點擊C#中的按鈕將調用Python腳本。 python腳本將使用配置文件連接到數據庫並提供結果。調用Python文件以從Visual C創建數據庫連接#

如果我自己調用Python程序,它完美的工作。當我從Visual C#調用時,會出現問題。 我的Python代碼是這樣的:

def db_Connection(): 
    logger.info(':Entering db_Connection().....') 
    logger.info(':Config file read.....') 
    config = ConfigParser.RawConfigParser() 
    config.read('config.cfg') 
    logger.info(':Config file read complete.....') 
    USER = config.get('DB_Connector','db.user_name') 
    logger.info(':USER acquired.....') 
    PASSWORD = config.get('DB_Connector','db.password') 
    SID = config.get('DB_Connector','db.SID') 
    IP = config.get('DB_Connector','db.IP') 
    PORT = config.get('DB_Connector','db.Port') 
    engine = create_engine('oracle://{user}:{pwd}@{ip}:{port}/{sid}'.format(user=USER, pwd=PASSWORD, ip=IP, port=PORT, sid=SID), echo=False) 
    connection = engine.connect() 
    logger.info(':Connected to DB.....') 
    p = engine.execute("SELECT * from VAM.ASSET where ASSET_ID = '{}'".format(asset_id)) 

    logger.info(':Calculating for any records.....') 
    if len(p.fetchall())!=0: 
     print 'Asset Exists' 

在日誌中尋找,最後一行是

2015-04-28 15:40:47,361 INFO :Config file read complete..... 

我怎樣才能解決這個問題嗎?

+2

我可以看到你的'config.cfg'使用相對名稱。你可以嘗試使用完整路徑嗎? –

+0

@Serge ...它爲我工作。謝謝 –

回答

1

根據您啓動C#程序的方式以及它如何啓動Python腳本,當前目錄可能不是您所期望的。

在使用的情況下,你應該使用完整的路徑,而不是一個相對的爲config.cfg

... 
config.read('/full/path/to/config.cfg') 
... 
+0

它的工作。 Python會將該值寫入文本文件。處理Python文件後,C#將從文本文件中獲取值。現在我可以看到C#正在使用舊值,然後處理Python。每次運行程序時,它都會取得以前的值。我在C#中也添加了一個計時器,但仍然無法工作。有什麼辦法可以將Python的值返回給C#嗎? –

+0

@Roshanr:有一些方法可以將一個值從一個子程序返回給它的父項,一個外部文本文件是其中之一,它應該可以工作。正如我假設你指的是[這個其他問題](http://stackoverflow.com/q/29700094/3545273),我會看看它。但是,如果能夠幫助您通知其他人您不再需要該部分的幫助*,您能接受這個答案嗎? –