如何使用 pywinauto 保存具有递增名称的多个文件

How to save multiple files with incrementing names using pywinauto

我正在尝试编写一个简单的脚本,它将文件中的文本递增 +1,然后保存文件,同时将文件名递增 +1。

所以基本上:

这是文本 1

另存为:File1.txt

这是文本 2

另存为:File2.txt

等等。我已经得到了我的脚本来使用记事本程序来执行此操作,但是我想不出一种方法来执行此操作而不必为每个文件打开记事本。 我试过尝试连接到进程 ID 等,但我只进行了大约一个月的编程,所以我在这个概念上度过了一段糟糕的时光。

#!/usr/bin/env python

from pywinauto.application import Application
b = int(raw_input("Where do you want to start? >"))
a = int(raw_input("How Many Labels do you need? >"))

def make_labels(a, b):

    app = Application().start("notepad.exe")
    app.UntitledNotepad.edit1.SetText("This is me typing %r" % b)
    app.UntitledNotepad.MenuSelect("File -> SaveAs")
    #app.SaveAs.ComboBox5.Select("UTF-8")
    app.SaveAs.edit1.SetText("Test_File%r.txt" % b)
    app.SaveAs.Save.Click()
    app.UntitledNotepad.TypeKeys("%FX")
    b = b + 1
    return b



while b < a:
    b = make_labels(a, b)

任何帮助弄清楚如何仅使用一个记事本实例使其工作的任何帮助都将不胜感激。

更新:

好的,我认为我已经取得了一些进步。我不知道您可以通过程序名称来识别它,所以我更改了它,现在它使用相同的 window。但是我的新问题是它会达到第二次将内容递增 +1 的程度,但是之后将无法打开保存选项:

#!/usr/bin/env python

from pywinauto.application import Application
import time

b = int(raw_input("Where do you want to start? >"))
a = int(raw_input("How Many Labels do you need? >"))
app = Application().start("notepad.exe")

def make_labels(b, app): 

    #app = Application().start("notepad.exe")
    app.Notepad.edit1.SetText("This is me typing %r" % b)
    app.Notepad.MenuSelect("File -> SaveAs")
    app.SaveAs.edit1.SetText("Test_File%r.txt" % b)
    app.SaveAs.Save.Click()

    #app.Notepad.TypeKeys("%FX")
    b = b + 1
    return b



while b < a:
     b = make_labels(b, app)

写两次行

app.SaveAs.Save.Click()

似乎解决了问题

#!/usr/bin/env python

from pywinauto.application import Application
b = int(raw_input("Where do you want to start? >"))
a = int(raw_input("How Many Labels do you need? >"))

def make_labels(a, b):

    app = Application().start("notepad.exe")
    app.UntitledNotepad.edit1.SetText("This is me typing %r" % b)
    app.UntitledNotepad.MenuSelect("File -> SaveAs")
    #app.SaveAs.ComboBox5.Select("UTF-8")
    app.SaveAs.edit1.SetText("Test_File%r.txt" % b)
    app.SaveAs.Save.Click()
    app.SaveAs.Save.Click()
    app.UntitledNotepad.TypeKeys("%FX")
    b = b + 1
    return b

while b < a:
    b = make_labels(a, b)

那么在你的函数中 make_labels 参数 'a' 是无用的。

我不确定您是否真的希望记事本 window 出现,或者您是否只对使用任何有效的方法编写文件感兴趣,这是您发现的第一种方法。如果是后者,你不需要pywinauto来保存多个文件。 openwrite 可以正常工作。

b = int(raw_input("Where do you want to start? > "))
a = int(raw_input("How Many Labels do you need? >"))
for x in range(b, b+a):
    with open("Test_file{}.txt".format(x), "w") as file:
        file.write("This is me typing {}".format(x))

好的!

所以我找到了解决问题的替代方法。我没有使用菜单 select 选项,就好像有人用鼠标点击它一样,我尝试了一种全键盘快捷方式,它起作用了:

#!/usr/bin/env python

from pywinauto.application import Application
import time

b = int(raw_input("Where do you want to start? >"))
a = int(raw_input("How Many Labels do you need? >"))
app = Application().start("notepad.exe")

def make_labels(b, app): 

    #app = Application().start("notepad.exe")
    app.Notepad.edit1.SetText("This is me typing %r" % b)
    app.Notepad.TypeKeys("^S")
    app.SaveAs.edit1.SetText("Test_File%r.txt" % b)
    app.SaveAs.Save.Click()

    #app.Notepad.TypeKeys("%FX")
    b = b + 1
    return b



while b < a:
    b = make_labels(b, app)
    app.Notepad.TypeKeys("^N")

这使用键盘输入保存文件,然后打开一个新文件(在同一应用程序实例下)并重复该过程。

我希望这对以后的其他人有所帮助。