我见过类似的问题(例如Running a command in a new Mac OS X Terminal window),但我需要确认这个命令及其在mac中的预期行为(我没有)。如果有人可以在Python 3mac中运行以下命令:
import subprocess, os
def runcom(bashCommand):
sp = subprocess.Popen(['osascript'], stdin=subprocess.PIPE, stderr=subprocess.PIPE)
sp.communicate('''tell application "Terminal"\nactivate\ndo script with command "{0} $EXIT"\nend tell'''.format(bashCommand))
runcom('''echo \\"This is a test\\n\\nThis should come two lines later; press any key\\";read throwaway''')
runcom('''echo \\"This is a test\\"\n\necho \\"This should come one line later; press any key\\";read throwaway''')
runcom('''echo \\"This is testing whether I can have you enter your sudo pw on separate terminal\\";sudo ls;\necho \\"You should see your current directory; press any key\\";read throwaway''')
首先,也是最基本的,“生成新终端并执行”命令是否正确?(作为参考,这个版本的runcom
函数来自this answer below,比我原来的版本干净得多。)
至于实际的测试:第一个测试内部双转义\\n
字符是否真正起作用。第二个测试,我们可以在“脚本”中放入(未替换的)新行,并且它仍然像分号一样工作。最后,最后一个测试您是否可以在单独的终端中调用sudo进程(我的最终目标)。在
在任何情况下,新的终端应该在你“按任意键”后消失。请确认这一点。在
如果其中一个不起作用,最好能进行矫正/诊断。同样值得赞赏的是:在Mac上生成一个终端,然后在其上执行(sudo,extended)bash命令,有没有一种更像python的方式呢?在
谢谢!在
我没有Python3,但是我稍微编辑了一下您的
runcom
函数,它应该可以工作:这很难回答,因为这些命令执行的是I期望它们做的事情,而这可能不是您期望它们做的事情。在
带有双反斜杠的
\\n
确实工作正常,因为它导致echo
发出换行符。但是,echo
不会发出双引号。在这也管用。在
没有理由不这样做,事实上确实如此。在
由于以下几个原因,这种做法行不通:
其他问题:
osascript
的脚本将在执行之前出现在终端窗口中。在上面的示例中,用户将看到每个“This is a test[…]”两次。在$EXIT
应该做什么ls
命令只会在新终端窗口中的当前工作目录始终是用户的主目录的情况下向用户显示“当前目录”throwaway
在脚本bashCommand
退出后将不可用最后,这个脚本在python3下根本不起作用,因为它以
TypeError
崩溃:communicate()
以字节字符串作为参数,而不是字符串。在你应该去调查一下!它不一定更像Python,但至少你可以消除一些间接层。在
相关问题 更多 >
编程相关推荐