pythonのsubprocessで同じディレクトリにある別ファイルを起動させています。
そのファイルはコマンドライン引数に応じて動作を変えているのですが、subprocess.Popen
でのコマンドライン引数の渡し方がわかりません。
python
1 subprocess.Poen(['start', '', 'hogehoge.py']' shell=True)
初歩的な質問で申し訳ありませんがご教授ください。
##追記
ここ数日ご教授いただいたことを確認しましたが、正常動作しません。
参照先ではコマンドライン引数無しでも実行させたいのでtry
で引数があるかを確認しています。
またhogehoge.pyでは受け取った引数は数値として扱いたいのでint
にしています。
下記のように受け取ったあとtry
とexcept
のどちらが動作しているか確認すると、
どちらにも入っておらず飛ばされていることが判明しました。
hogehoge.pyのせいでありそうだというところまで判明しました。
###再追記
下記が全ソースです。
「main.py」
python
1import tkinter as tk 2import subprocess as sp 3import k_msg 4 5def cptxt(event): 6 num = ent.get() 7 if not str.isdecimal(num): 8 k_msg.msg('error', 'input integer') 9 ent.delete(0, tk.END) 10 return 11 sp.Popen(['start', '', 'hogehoge.py', num], shell = True) 12 root.destroy() 13 14root = tk.Tk() 15ent = tk.Entry(root) 16ent.bind('<Return>', cptxt) 17ent.pack() 18root.mainloop()
「hogehoge.py」
python
1import tkinter as tk 2import pyperclip as pc 3import threading as th 4import sys 5import k_msg 6 7#ステータスのクリア 8def clear_status(i): 9 stts[i]['text'] = '' 10 11#コールバック関数_ステータスにコピーしたことを通知する 12def callback(i): 13 def copy_txt(event): 14 etr = etrs[i].get("1.0", "end-1c") 15 pc.copy(etr) 16 stts[i]['text'] = 'copy...' 17 t = th.Timer(1, clear_status, args=[i]) 18 t.start() 19 return copy_txt 20 21#コマンドラインオプションの値をテキストボックスの数にする_デフォルトは3 22if __name__ == '__main__': 23 try: 24 args = sys.argv 25 num_text = int(args[1]) 26 print('try') 27 except: 28 num_text = 3 29 print('except') 30 #枠の作成 31 print(num_text) 32 root = tk.Tk() 33 frame_field = '500x' + str(num_text * 100) 34 root.geometry(frame_field) 35 root.title('Copy Text V1.0') 36 #各ボタン・テキストボックスの作成 37 etrs = [] 38 butts = [] 39 stts = [] 40 for i in range(num_text): 41 etrs.append(tk.Text(root, width='40', height='3', font='consolas')) 42 etrs[i].place(x='10', y=100*i+10) 43 butts.append(tk.Button(root, text='Copy', width='7', height='1', font='consolas')) 44 butts[i].bind('<Enter>', callback(i)) 45 butts[i].place(x='415', y=100*i+10) 46 stts.append(tk.Label(root, text='', width='10', height='1', font=('consolas', 10))) 47 stts[i].place(x='415', y=100*i+50) 48 49 root.mainloop()
「k_msg.py」
python
1def msg(ttl, val, box=64): 2 """ 3 show messagebox 4 5 args: 6 [0] : title 7 [1] : value 8 [2] : form type 9 10 form type(return value): 11 0 : OK(1) 12 1 : OK(1) キャンセル(2) 13 2 : 中止(3) 再試行(4) 無視(5) 14 3 : はい(6) いいえ(7) キャンセル(2) 15 4 : はい(6) いいえ(7) 16 5 : 再試行(4) キャンセル(2) 17 6 : キャンセル(2) 再実行(10) 続行(11) 18 +16 : Exclamation 19 +32 : Question 20 +48 : Warning 21 +64 : Information 22 """ 23 import ctypes as ct 24 u32 = ct.WinDLL('user32') 25 return u32.MessageBoxW(0, val, ttl, box+65536)
回答2件
あなたの回答
tips
プレビュー