[英]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.