【问题标题】:How to make a program that can be opened with a file? (python)如何制作可以用文件打开的程序? (Python)
【发布时间】:2018-05-06 21:20:45
【问题描述】:

我正在制作一个程序,它可以打开一个文件并对其执行一些操作,我想知道是否有一种方法可以让你单击一个文件,它会在程序中打开它,而不是进入程序,单击打开,然后在文件中导航以找到它,或者只是一种可以单击“打开方式...”并选择程序的方式。如果有帮助,这里是代码:

from tkinter import *
from tkinter import filedialog
from subprocess import *
import os

root = Tk()
root.title("Snake converter")
def open_file():

    filename = filedialog.askopenfilename(filetypes = (("Snake files", "*.sim"),("Python Files", "*.py"),("All files", "*.*")))
    filenametmp = filename + ".tmp"
    print filename + " is being compiled. Please wait..."
    tf = open(filenametmp, "a")
    f = open(filename, "r")
    filecontents = f.read()
    tf.write("from simincmodule import *" + "\n")
    tf.write(filecontents)
    os.chdir("C:\Snake\info\Scripts")
    print os.getcwd()
    call(["pyinstaller", filenametmp])
    os.remove("C:/Snake/info/Scripts/build")
    f.close()
    tf.close()
    print "\n\n----------------------------------------------------------------------\n\nFinished compiling " + filename + ". Find the program under [filename]/[filename].exe"

openbutton = Button(root, text = "Open", width = 10, command = open_file)
openbutton.pack()

root.mainloop()

任何帮助或建议将不胜感激。

谢谢!

【问题讨论】:

  • 您有没有想过,如果您想以另一种方式打开文件,您可能应该将open_file() 拆分为两个功能,一个打开对话框,一个实际打开选定的文件?
  • 在 Windows 上这是可能的任务,即使您希望以编程方式执行此操作。通过cmd (assoc .tmp=<name_of_association>) 中的assoc 命令为所需的文件扩展名创建一个新关联,然后通过ftype (ftype <name_of_association>="python <path_to_script>" "%1" "%*") 为其绑定一个命令。显然,您可以使用subprocess 模块来包装这样的想法。需要管理员权限。
  • @ImperishableNight 好主意!

标签: python windows tkinter open-with


【解决方案1】:

我会怎么做:

  1. 让您的程序从标准输入读取并写入标准输出
  2. 使用外壳的力量。如果您在 unix shell 中,只需执行 cat infile | ./python myProgram.py > outfile

这会将infile 的内容提供给stdin 上的程序,然后将stdout 的输出写入outfile

【讨论】:

  • 我认为 OP 是在询问他如何将某些文件类型与他的应用程序相关联。这将涉及使用 cx_freeze 之类的东西将 python 脚本转换为可执行文件
  • 实际上,我认为某些操作系统允许将文件类型与比应用程序更复杂的命令行相关联,例如在 Windows 中,您可以将python my_app.py "%1" 放在注册表的合适位置,它会起作用。或者,您可以使用批处理脚本,该脚本很脏但仍然有效。
  • @ImperishableNight - 如果你运行批处理文件,也会出现 Msdos 窗口,如果你不想要第二个窗口,你可以试试这个代码,Example3.pyw - 导入pywinauto pywinauto.Application().start(r"C:\Python27\Pythonw.exe c:\test\my_app.py") ps - 看看我的回答 - 我希望你会喜欢这个。
【解决方案2】:

“打开方式...”通常将文件的路径名发送到sys.argv。因此,在程序的适当位置添加以下内容:

if len(sys.argv) > 1:
    open_file(sys.argv[1])

(正如我在评论中所说,你真的想让你的open_file 接受一个参数,并有另一个像open_file_dialog 这样的函数来打开对话框。)

这就留下了一个问题,即首先如何制作可以“打开...”的东西。如果您在 Windows 上,您应该能够通过编辑注册表来更好地控制文件关联:有关详细信息,请参阅 this MSDN page

另外,一种快速而简单的方法是制作一个.bat 脚本,该脚本接受一个参数并将其传递给您的python 程序。记得前段时间做过,但是很久没认真用过windows了,一时想不通怎么写脚本。

【讨论】:

  • 这个提议的解决方案并不是 OP 所要求的......他正在寻找更多“如何配置操作系统以在我点击它时自动打开我的文件”。然而,话虽如此,这是朝着这个方向迈出的相当合理的一步,因为上面的代码会让 OP 将文件拖放到他的程序可执行文件上(假设它是可执行文件)并让它打开可执行文件并打开文件。
  • @Gary02127 抱歉,如果您误解了它,但这不是我要问的。虽然谢谢!
【解决方案3】:

我是 Autohotkey 工具和 Python 语言的粉丝,

另一种方法是:

如果你想运行一个程序,然后想用一个文件打开它(“Open With...”)

你可以考虑一下,

使用键盘快捷键宏制作您自己的计算机动作脚本。

第 1 步:在您的 Windows 系统上安装 (Python27)。 Click Here

第 2 步:然后安装 Python 包 - pyautogui 和 pywinauto

您可以使用这个 Msdos 批处理脚本:

安装.bat

C:\Python27\scripts\pip.exe install pyautogui
pause
C:\Python27\scripts\pip.exe install pywinauto
pause

现在您已准备好制作和使用此 Python 脚本:

Example1.pyw

#run Notepad with "Open..." 
#######################
import pywinauto
pywinauto.Application().start(r"C:\Windows\System32\Notepad.exe c:\test\test.txt")
#######################

Example2.pyw

#run Notepad
#######################
import pywinauto
pywinauto.Application().start("C:\Windows\System32\Notepad.exe")
#######################


#Open a File - "Open With..." 
#######################
import pyautogui
import time
time.sleep(2)
pyautogui.hotkey('ctrl','o') #Many Programs use Shortcut Ctrl+o to "Open With..." 
time.sleep(.750)
pyautogui.typewrite('c:\\test\\test.txt',0)
time.sleep(2)
pyautogui.hotkey('enter')
#######################

# you can send any text or Keyboard Shortcuts Combinations - Example Copy - pyautogui.hotkey('ctrl', 'c')

注意:如果您使用带有 typewrite 命令的文件路径 - 您不能放置(单反斜杠 \ ),您必须将其替换为(双反斜杠 \\ )

提示:Python 语言与 AutoPythonlauncher 软件是一个很好的组合 - 如果您想制作,Windows 桌面上的工具栏 - 带有 Python 脚本的鼠标或触摸设备的可执行图片。 - 更多信息请查看Homepage

【讨论】:

    猜你喜欢
    • 2018-10-13
    • 1970-01-01
    • 2013-05-13
    • 2018-07-15
    • 2015-08-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 2013-02-09
    相关资源
    最近更新 更多