2014-10-06 208 views
2

我想從Automator創建一個「.app」來運行一個簡單的python腳本。當我在Automator中執行腳本時,會出現一個錯誤,說或多或少的「檢查您的操作屬性並再次執行」。從automator運行python腳本

並且在歷史中它說「追溯(最近呼叫最後:)」。重點是這個腳本在終端會話中運行良好。

對於重命名數據庫(參見下文),我的循環「While」似乎至少有一個錯誤,因爲我可以在此階段執行腳本。
管理sqlite數據庫有問題嗎?但我無法理解,因爲終端沒有問題。有什麼缺失?

我的python腳本:

#!/usr/bin/python 

import sqlite3 
import os.path 

file_name = "newDB.data" 
choice = "" 

if os.path.isfile(file_name): 
    choice = raw_input("Erase DB? press [y] or [n]:\n") 

if choice == "y": 
    print "erase" 

    while True: 
     try: 
      os.remove(file_name) 
      break 

    except OSError as e: # name the Exception `e` 
     print "Failed with:", e.strerror # look what it says 
     print "Error code:", e.code 

if choice == "n": 
    print "Bye!" 
    exit() 


# start sqlite connection 
conn = sqlite3.connect("newDB.data") 
c = conn.cursor() 


# attach 
c.execute("ATTACH database 'store1.data' AS db1") 
c.execute("ATTACH database 'store2.data' AS db2") 


# rename tables 
while True: 
    try: 
     c.execute("ALTER TABLE db1.ZPATIENT RENAME TO table1") 
     print "table 1 renamed" 
     break 

    except: 
     c.execute("ALTER TABLE db1.table1 RENAME TO ZPATIENT") 
     print "except 1" 


while True: 
    try: 
     c.execute("ALTER TABLE db2.ZPATIENT RENAME TO table2") 
     print "table 2 renamed" 
     break 

    except: 
     c.execute("ALTER TABLE db2.table2 RENAME TO ZPATIENT") 
     print "except 2" 


# some information commands (START): 
c.execute("SELECT * from table1") 
print(c.fetchall()) 
c.execute("SELECT * from table2") 
print(c.fetchall()) 
# some information commands (END) 


#c.execute("create table ZPATIENT as select * from table1 union select * from table2") ---> first union action but some entries duplicated (one column changed?) 

# remove some duplicated entries... 
c.execute("create table ZPATIENT as select * from (select * from table1 union select * from table2) final group by ZDATECREATED") 
c.execute("CREATE TABLE Z_PRIMARYKEY (Z_ENT int, Z_NAME text, Z_SUPER int, Z_MAX int)") 
c.execute("CREATE TABLE Z_METADATA (Z_VERSION int, Z_UUID text, Z_PLIST BLOB)") 

c.execute("SELECT count(*) FROM ZPATIENT") 
result=c.fetchone() 
number_of_rows=result[0] 
print number_of_rows 
start = 0 
end = number_of_rows + 1 

c.execute('SELECT * FROM ZPATIENT') 
newresult=c.fetchall() 

for row in newresult: 

    start += 1 
    end -= 1 
    print start 
    print end 

    # some information commands (START): 
    list_of_tuple = list(row) 
    list_of_tuple[0] = start 
    list_of_tuple[2] = end 
    row = tuple(list_of_tuple) 
    print row 
    # some information commands (END) 

    c.execute("UPDATE ZPATIENT SET Z_PK = ? WHERE rowid = ?", (start, start)) 
    c.execute("UPDATE ZPATIENT SET Z_OPT = ? WHERE rowid = ?", (end, start)) 


c.execute("INSERT INTO Z_PRIMARYKEY (Z_ENT, Z_NAME, Z_SUPER, Z_MAX) VALUES (0, 'Patient', 0, ?)", (start,)) 

# close 
conn.commit() 
conn.close() 

要工作,我有一個名爲store1.data和store2.data在同一文件夾2個SQLite數據庫...

如果任何人有一個解決方案...我不知道是否有一個更簡單的方法來執行此點擊一次?

回答

1

一個簡單的解決方案可能是避免使用automator並且只製作一個bash腳本來調用python腳本。如果這是你想要的,你可以通過雙擊來執行bash腳本。

#! /bin/bash 

python scriptname.py 

是您所需要的。

+0

它適用於.command。謝謝 – Trichophyton 2014-10-15 16:52:43