所以我有个问题。我从网上下载了一个程序。这是一个命令行应用程序。我编写了一个代码,它为应用程序生成了一些n-k命令。我已经将它们写入输出文件。我可以用Python编写一个应用程序,但是它会冻结一些命令。我已经手动测试了它们,似乎有两个问题:
bla-bla-bla这样的输出,这个东西不会写入输出文件中。所以,如果我运行一个命令./app -p /file1 -o /file2 -s -a smth- > /fileOutput.txt,fileOutput.txt是空的,尽管在终端中,有这样一条bla-bla-bla消息,说明出了问题。如果命令给bla-bla-bla,应用程序可能会冻结一段时间。以下是我想做的事:
CD进入文件夹,包含应用程序;For command in fileWithCommands执行命令并启动下一个命令,只有当前面的命令完成时;bla-bla-bla的消息(因为它看起来像file1 bla-bla-bla),那么将命令和这个奇怪的输出写入badOutputs.txt文件。以前从未做过applescript。然而,到目前为止,这就是我所做的:
set theFile to "/Users/MeUser/Desktop/firstCommand"
set fileHandle to open for access theFile
set arrayCommand to paragraphs of (read fileHandle)
#I have found the previous code here: http://alvinalexander.com/mac-os-x/applescript-read-file-into-list-array-examples
close access fileHandle
tell application "Terminal"
activate
do script "cd /Users/MeUser/Desktop/anApp/"
repeat with command in arrayCommand
do script command
end repeat
end tell尽管存在问题,但如果在一个窗口中,命令构成了一个巨大的队列。如果没有window 1,cd和命令在不同的窗口中。我仍然无法保存输出。
更新
按照@Mark 的建议做的。所以现在我有了这样的代码:
set theFile to "/Users/meUser/Desktop/firstCommand"
set fileHandle to open for access theFile
set arrayCommand to paragraphs of (read fileHandle)
close access fileHandle
repeat with command in arrayCommand
do shell script "cd /Users/meUser/Desktop/App/; " & command
end repeat在命令中,我添加了以下内容:
2>&1 /Users/meUser/Desktop/errorOut.txt然而,苹果脚本说,应用程序的错误就是脚本的错误。即:文件损坏,应用程序失败。我希望它写入错误文件,在错误文件中失败并移动到下一个命令,而脚本只是失败。
发布于 2015-12-17 16:43:54
也许不是一个完整的解决方案,但不仅仅是一种评论,更容易用这种方式格式化.
第一期
你写在终端上的命令行应用程序可能写的是stderr,而不是stdout。尝试将stderr重定向到与stdout相同的位置,使用
./app -p ... > /FileOutput.txt 2>&1第二期
你不能这样做:
do shell script cd somewhere
do shell script do_something因为每个do shell script都将在中执行一个单独的、无关的进程。因此,您的第一个进程将启动--与所有进程一样,在默认目录中启动--并正确地更改目录,然后退出。然后,您的第二个进程将启动--与所有进程一样,在默认目录中启动--并尝试运行您的命令。而不是这样,你可以这样做:
do shell script "cd somewhere; do_something"它启动一个进程,该进程改变目录,然后在那里运行命令行程序。
第三期
你为什么要把你的命令发送到终端?用户是否需要在终端中看到某些内容--似乎不太可能,因为您想要捕获输出,不是吗?你就不能用do shell script运行命令吗?
第四期
如果希望将正常输出与错误输出分开,则可以:
./app ... params ... > OutputFile.txt 2> errors.txt建议1
您可以保留所有脚本中的所有错误,并将它们累加到一个文件中,如下所示:
./app .. params .. >> results.txt 2>&1这可能使您以后能够单独处理错误。
建议2
您可以将shell脚本的输出捕获到Applescript变量中,比如ScriptOutput,这样您就可以解析它:
set ScriptOutput to do shell script "..."建议3
如果您的脚本导致的错误正在停止循环,您可以像这样将它们封装在一个try block中,这样就可以处理这些错误,并且一切都继续进行:
try
do shell script "..."
on error errMsg
display dialog "ERROR: " & errMsg
end tryhttps://stackoverflow.com/questions/34335446
复制相似问题