如何在不使用命令行的情况下运行 Perl 脚本?
Posted
技术标签:
【中文标题】如何在不使用命令行的情况下运行 Perl 脚本?【英文标题】:How can I run a Perl script without using the command line? 【发布时间】:2015-04-06 19:13:33 【问题描述】:我编写了一些 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 操作系统上都更容易完成。
【问题讨论】:
如果您将 perl 设置为文件关联,则可以双击脚本运行它。尽管您需要以不同的方式处理命令行参数。 你使用的是什么操作系统? 鉴于对 Excel 和 VB 的引用,我会假设 Windows .... @Sobrique 当用户提到bash
和script.sh
时,我多次假设Linux/OSX 只是发现它们在cygwin 下的Windows 上。同样,当用户提到 Excel 时发现它们是在 Mac 上时,我假设是 Windows。
This solution 可能会有所帮助
【参考方案1】:
这听起来像是 OSX Folder Action
的完美应用程序。基本上,您启动 Automator
并告诉它您想要创建一个 Folder Action
,它会为您提供一个分屏,您可以在其中执行操作在左侧,您可以在右侧开发脚本。
将操作Run shell script
从左侧拖到右侧,然后在顶部选择要应用到的文件夹。然后将其从运行 bash
更改为在 /usr/bin/perl
中使用 Perl 解释器并粘贴您的脚本。
然后你需要做的就是在文件夹中放一个文件,它会在上面运行 Perl 脚本。
您可以在System Preferences-> Sharing
中使用 Samba 与您的 Windows 用户共享该文件夹,以便他们受益于 OS X 的强大功能。
【讨论】:
自动机+1。出于某种原因,我总是忘记这个工具,但它确实为非终端友好用户提供了一个很好的选择。【参考方案2】:您可以在 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
,因为文件存在的测试有时会捕捉到尚未删除的文件,或者捕捉到未完全创建的文件。
我确实在 *** 的其他地方的 executing stuff in an Apple environment 上找到了一些东西。
【讨论】:
以上是关于如何在不使用命令行的情况下运行 Perl 脚本?的主要内容,如果未能解决你的问题,请参考以下文章
如何在不使用“sh”或“bash”命令的情况下运行 shell 脚本?
如何在不使用子进程的情况下从 python 自动化脚本中运行 python 'sdist' 命令?
在没有 CronTab 的情况下运行 Perl 脚本 1 分钟间隔
如何在不使用 tkinter 打开控制台窗口的情况下运行 Python 脚本?