【问题标题】:What's Python's os.system() equivalent to cocoa/Objective-C?什么是 Python 的 os.system() 相当于 cocoa/Objective-C?
【发布时间】:2011-03-10 17:33:25
【问题描述】:

我想在我的 Mac 程序中运行一些终端命令。 例如,我通常在我的 shell 中使用 mate abc.txtpython abc.py 打开 Text Mate 或运行 python 脚本。

如何使用 Cocoa/Objective-C 做同样的事情?

我想过this method,但我更喜欢只在一行中运行。

例如,当用户输入“python abc.py”时,我只是像在 Terminal.app 中一样运行命令。 Python 的等效命令是os.system()

NSString* item = [inputItem stringValue];
[NSRuncommandLikeShell item]; <-- ????

应该保留环境变量,这样我就不需要运行'/usr/bin/python'了。

编辑

我可以使用~/.MacOSX/environment.plist 文件来设置路径环境。或者,我也可以将this utility 用于 GUI。

【问题讨论】:

    标签: python objective-c cocoa shell command


    【解决方案1】:

    您可以使用NSTask 对象。如果您不喜欢其中的所有设置,您可以创建一个 NSTask 类别来为您完成。

    【讨论】:

    • 您能详细说明一下吗?并且通过这种方法,我可以拥有来自 bash .profile 和 .bashrc 的所有环境变量吗?
    • 是的。 NSTask 肯定是要走的路。尽量避免system() 来电。
    【解决方案2】:

    您可以使用 C 运行时 system() 调用。

    #include <stdlib.h>
    
    system([item UTF8String]);
    

    【讨论】:

    • 它似乎工作,但外壳路径丢失得到这个错误:e: command not found
    • 尽量避免在您的代码中运行system() 调用。它们被本地化为自己的会话(调用system("cd ~/Desktop") 不会将当前工作目录带到下一个system() 调用),并且不如使用NSTask 安全。如果我没记错的话,它们也有很多漏洞,并且容易受到安全黑客攻击。
    猜你喜欢
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-15
    • 1970-01-01
    • 2023-04-07
    • 2010-10-24
    • 2015-04-23
    相关资源
    最近更新 更多