元の問題に対する答えを探していました.win32api.ShellExecuteステートメントが正常に実行されたことを(プログラムで)判断するにはどうすればよいですか。正常に実行された場合は、os.remove()ステートメントを実行します。
調査の結果、ShellExecute() 呼び出しが HINSTANCE を返すことがわかりました。さらに掘り下げてみると、成功した場合、ShellExecute() は HINSTANCE > 32 を返すことがわかりました。私の問題/質問は、プログラムの残りのフローを制御するためにどのように使用するのですか? if HINSTANCE> 32:
次の部分を制御するステートメントを使用しようとしましたが、NameError: name 'hinstance' is not defined
メッセージが表示されます。これは、参照する前に変数「hinstance」を定義する必要があることを意味するため、通常、これは私を混乱させることはありません。ただし、ShellExecute は HINSTANCE を返すと思っていたので、使用できるようになると思いましたか?
これを実装しようとしている完全なコードを次に示します。私の print_file() 定義では、hinstance を完全な win32api.ShellExecute() コマンドに割り当てて、hinstance をキャプチャし、関数の最後に明示的に返すことに注意してください。これも機能しません。
import win32print
import win32api
from os.path import isfile, join
import glob
import os
import time
source_path = "c:\\temp\\source\\"
def main():
printer_name = win32print.GetDefaultPrinter()
while True:
file_queue = [f for f in glob.glob("%s\\*.txt" % source_path) if isfile(f)]
if len(file_queue) > 0:
for i in file_queue:
print_file(i, printer_name)
if hinstance > 32:
time.sleep(.25)
delete_file(i)
print "Filename: %r has printed" % i
print
time.sleep(.25)
print
else:
print "No files to print. Will retry in 15 seconds"
time.sleep(15)
def print_file(pfile, printer):
hinstance = win32api.ShellExecute(
0,
"print",
'%s' % pfile,
'/d:"%s"' % printer,
".",
0
)
return hinstance
def delete_file(f):
os.remove(f)
print f, "was deleted!"
def alert(email):
pass
main()