簡體   English   中英

如何在不使用命令行的情況下運行 Perl 腳本?

[英]How can I run a Perl script without using the command line?

我編寫了一些 Perl 腳本,可以讓我更快地完成工作。 這些腳本中的每一個都使用如下命令運行:

perl PerlScript.pl InFile > OutFile

InFile 和 OutFile 通常都是制表符分隔的文件,我工作場所的其他人只能將其視為 Excel 文件。 我的同事會從使用這些腳本中受益,但他們對從命令行運行程序的想法感到害怕。 有什么方法可以從用戶友好的界面(如 GUI)運行 Perl 腳本? 我的理想解決方案是允許他們將 Excel 文件拖到一個文件夾中,然后用鼠標單擊一個按鈕,這將生成一個新的 Excel 文件,他們可以將其拖回任何需要的地方。

除了它存在之外,我對 Visual Basic 一無所知,但我暗示它可能對這個問題有用。 是否可以在 Visual Basic 腳本中運行 Perl 腳本? 認為通常害怕命令行和計算機科學的人能夠輕松運行 Visual Basic 腳本是否合理?

注意:我和我的大多數同事一樣使用 Mac OS。 特定於 Windows 的解決方案會很好,因為我們有幾台 Windows 計算機專門用於執行任務,無論出於何種原因,在 Windows 操作系統上都更容易完成。

這聽起來像是 OSX Folder Action的完美應用程序。 基本上,您啟動Automator並告訴它您要創建一個Folder Action ,它會為您提供一個分屏,您可以執行的操作在左側,您在右側開發腳本。

將操作Run shell script從左側拖到右側,然后在頂部選擇要應用的文件夾。 然后將其從運行bash更改為使用/usr/bin/perl的 Perl 解釋器並粘貼您的腳本。

然后您需要做的就是在文件夾中放置一個文件,它會在其上運行 Perl 腳本。

您可以在System Preferences-> Sharing使用 Samba 與您的 Windows 用戶共享該文件夾,以便他們從 OS X 的強大功能中受益。

您可以在 VBA 中使用Shell命令執行此操作。 這是 Windows 環境中的示例。 我不確定這些命令在 OSX 環境中的效果如何。

感謝Onorio Catenacci的一些代碼被徹底竊取。

Public Const CmdPath = "C:\Windows\system32\cmd.exe"
Public Const PerlExecPath = "C:\path\to\perl\bin\perl.exe"
Public Const ScriptPath = "C:\Temp\script.pl"
Public Const OutputDir = "C:\Temp"

Function FileExists(ByVal FileToTest As String) As Boolean
   FileExists = (Dir(FileToTest) <> "")
End Function

Function GetWorkbookIfLoaded(ByVal FileName As String) As Workbook
   Dim lWbName As String
   lWbName = Dir(FileName)
   If lWbName = "" Then
       lWbName = FileName
   End If
   On Error Resume Next
   Set GetWorkbookIfLoaded = Workbooks(lWbName)
   On Error GoTo 0
End Function

Function DeleteFile(ByVal FileToDelete As String)
   Dim lUserOK As Boolean
   Dim lReturn As Boolean
   Dim lWbName As String
   Dim oBk As Workbook
   
   lUserOK = True
   lWbName = Dir(FileToDelete)
   
   lReturn = (lWbName = "")
   
   If Not lReturn Then
      Set oBk = GetWorkbookIfLoaded(lWbName)
      
      If Not oBk Is Nothing Then
         oBk.Close
         Set oBk = GetWorkbookIfLoaded(lWbName)
         lUserOK = (oBk Is Nothing)
      End If
      
      If lUserOK Then
          SetAttr FileToDelete, vbNormal
          Kill FileToDelete
          lReturn = True
      End If
      
   End If
   DeleteFile = lReturn
   
End Function

Sub CreateNewExcel()
    Dim lProceed    As Boolean
    Dim lRetVal     As Double
    Dim lMsgResult  As VbMsgBoxResult
    Dim lOutputPath As String
    Dim lCommand    As String
    
    lOutputPath = OutputDir & "\output.tab"
    lCommand _
        = CmdPath & " /C " & PerlExecPath & " -e " _
        & Chr(34) & "print qq[${\(scalar localtime)}\t1\t2\t3\t4\n]" _
        & Chr$(34) & " > " & lOutputPath
        
    lProceed = DeleteFile(lOutputPath)
    If Not lProceed Then Exit Sub
    
    DoEvents
    
    lRetVal = Shell(lCommand, vbHide)
    Application.Wait (Now + TimeValue("0:00:01"))
    
    If lRetVal = 0 Or Not FileExists(lOutputPath) Then
        MsgBox ("Failed to run script")
    Else
        Workbooks.Open (lOutputPath)
    End If
       
End Sub

我不得不拋出Application.Wait調用,因為文件存在的測試有時會捕獲尚未刪除的文件,或者無法捕獲未完全創建的文件。

我確實在 StackOverflow 的其他地方找到了一些關於在 Apple 環境中執行內容的內容

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM