ConEmu Sublime和Python在shell中加载文件

ConEmu Sublime和Python在shell中加载文件,python,sublimetext3,conemu,Python,Sublimetext3,Conemu,我正在尝试编写一个升华函数,该函数将获取当前文件并在ConEmu中的新shell中运行它,我在转义a\t时遇到一些问题 当我有一条看起来像 c:\ps\test.ps1 t掉下来了,我试着做一些事情来逃避它,但没有任何运气 这里是升华函数 class ConemuPstestCommand(sublime_plugin.TextCommand): def run(self, edit): if self.view.file_name(): if self.vi

我正在尝试编写一个升华函数,该函数将获取当前文件并在ConEmu中的新shell中运行它,我在转义a\t时遇到一些问题

当我有一条看起来像

c:\ps\test.ps1

t掉下来了,我试着做一些事情来逃避它,但没有任何运气

这里是升华函数

class ConemuPstestCommand(sublime_plugin.TextCommand):
   def run(self, edit):
      if self.view.file_name():
         if self.view.is_dirty():
            self.view.run_command("save")

      folder = path.dirname(self.view.file_name())
      testFile =  path.join(folder, "test.ps1")
      if(not (path.exists(testFile))):
         testFile = path.join(path.split(folder)[0],"test.ps1")
      if(path.exists(testFile)):
         testFile = testFile + "\n"

         print(testFile)
         testFile = re.sub(r'\t', r'\\t', testFile)
         #testFile = testFile.translate(str.maketrans({"\t":  r"\\\t","\\": r"\\"}))
         print(testFile)
         subprocess.call([CONEMUC, "-GUIMACRO:0","Task(""{Shells::PowerShell}"")"],startupinfo=si)
         #subprocess.call([CONEMUC, "-GUIMACRO:0","Recreate(0,0,0)"],startupinfo=si)
         subprocess.call([CONEMUC, "-GUIMACRO:0", "PASTE", "2", testFile], startupinfo=si)
基本上,如果在powershell模块中点击F6,它将在该文件夹中运行test.ps1。基于这两个打印(testFile),sublime控制台中的输出看起来是正确的,当它转到powershell时,t on测试丢失(奇怪的是\仍然存在)

真正奇怪的是,如果我注释掉Task()(新的powershell控制台)行,它会将其正确复制到当前控制台(相同的conemu任务类型)

Im运行版本150513[64]和sublime 3(3083)

作为一个简单的测试,我从conemu控制台运行了这段python代码

import re,subprocess
CONEMUC = "C:\\Program Files\\ConEmu\\ConEmu\\ConEmuC64.exe"

si = subprocess.STARTUPINFO() 
si.dwFlags = subprocess.STARTF_USESHOWWINDOW
si.wShowWindow = subprocess.SW_HIDE

subprocess.call([CONEMUC, "-GUIMACRO:0","Task(""{Shells::PowerShell}"");context;print(""test"")"],startupinfo=si)
这将很好地启动控制台,但不会打印文本

Python版本也是如此 win32上的Python 3.4.2(v3.4.2:ab2c023a9432,2014年10月6日,22:16:31)[MSC v.1600 64位(AMD64)]

一个更简单的测试,我启动了一个cmdshell并运行了这个命令

ConEmuC.exe -guimacro task("{Shells::cmd}");context;print("test")
它将返回OK;好啊好的 打开新外壳,并在我运行此测试的控制台中打印测试。所以看起来上下文并没有真正做它应该做的事情

我刚试了另一个简单的测试

ConEmuC.exe -guimacro Create(0,0);context;print("test")
这次它工作正常。似乎Task()和Context不想一起工作

好像 不确定这是conemu正在做的事情还是sublime/python方面的事情。有什么想法吗


感谢

任务
是异步函数,所以您必须等待一段时间,以便在主线程中创建新的虚拟控制台对象。以下命令正在工作(从ConEmu中的{cmd}选项卡中选中)

因此,在您的情况下,它将是这样的:

subprocess.call([CONEMUC, "-GUIMACRO:0","Task(""{Shells::PowerShell}"");sleep(1000);context;print(""test"")"],startupinfo=si)
此外,这里还有一些“指南”:

  • 不要调用
    ConEmuC
    两次。如中所述,您可能并且实际上必须在一个
    ConEmuC
    调用中执行多个宏。例如,用分号分隔函数

  • 同样的文档说明了逐字字符串参数。只有双引号必须加倍。粘贴(2,@“您的”“字符串”)

  • 创建新任务后,必须通过
    context
    函数切换执行上下文,才能粘贴到新创建的控制台中

  • 最后,还有函数
    PasteFile
    Print
    。它们可能更合适


  • 谢谢,我尝试了双引号,但运气不太好,我会尝试把这一切放在一起。谢谢运气不好,它创建了shell ok,不确定上下文是否有可见的反应,但它肯定不会将测试打印到控制台。下面是我所做的:subprocess.call([CONEMUC,“-GUIMACRO:0”,“Task(“{Shells::PowerShell}”);context;print(““test”)”),startupinfo=si)ConEmu版本?屏幕截图?做了很多测试(更新了原始帖子),看起来Task()和Context不能很好地协同工作?事实上它们确实可以。可能PowerShell会在启动过程中清除某个输入队列。在上下文之后添加睡眠功能,实验睡眠持续时间。
    subprocess.call([CONEMUC, "-GUIMACRO:0","Task(""{Shells::PowerShell}"");sleep(1000);context;print(""test"")"],startupinfo=si)