我一直在寻找的Python代码动态评估,并遇到了eval()
和compile()
功能,以及exec
声明.
有人可以解释之间的区别eval
和exec
怎样的不同模式,compile()
适应吗?
以下Ruby方法有什么区别?
exec
,system
和%x()
或反引号
我知道它们用于通过Ruby以编程方式执行终端命令,但我想知道为什么有三种不同的方法来执行此操作.
我很难理解shell_exec()
和exec()
... 之间的区别
我一直习惯于exec()
执行服务器端命令,我shell_exec()
什么时候使用?
是否shell_exec()
只是一个速记exec()
?参数较少似乎是一样的.
有什么区别?
每个功能都有特定的情况或原因吗?如果是的话,你能举一些这些情况的例子吗?
PHP.net说它们用于执行外部程序.参见参考 从我看到的例子中,我没有看到任何明显的区别.
如果我只是简单地运行一个脚本(bash或python),你建议我使用哪个函数?
今天我用一个命令得到了帮助,但它似乎没有起作用.这是命令:
find /home/me/download/ -type f -name "*.rm" -exec ffmpeg -i {} -sameq {}.mp3 && rm {}\;
Run Code Online (Sandbox Code Playgroud)
shell返回
find: missing argument to `-exec'
Run Code Online (Sandbox Code Playgroud)
我基本上要做的是递归遍历一个目录(如果它有其他目录)并对.rm
文件类型运行ffmpeg命令并将它们转换为.mp3
文件类型.完成此操作后,删除.rm
刚刚转换的文件.
我很感激任何帮助.
我希望在Google上找到这四者之间的差异,我希望有关于此的大量信息,但四个电话之间确实没有任何可靠的比较.
我开始尝试编译一种基本的一目了然的看看这些系统调用之间的差异,这就是我得到的.所有这些信息是否正确/我错过了什么重要的事情?
Fork
:fork调用基本上复制了当前进程,几乎在所有方面都是相同的(并非所有内容都被复制,例如,某些实现中的资源限制,但想法是尽可能创建尽可能接近的副本).
新进程(子进程)获取不同的进程ID(PID),并将旧进程(父进程)的PID作为其父PID(PPID).因为这两个进程现在运行的代码完全相同,所以它们可以通过fork的返回代码告诉哪个进程 - 子进程为0,父进程获取子进程的PID.当然,这就是假设fork调用有效 - 如果没有,则不创建子节点并且父节点获取错误代码.
Vfork
:vfork和fork之间的基本区别在于,当使用vfork()创建新进程时,父进程将暂时挂起,子进程可能会借用父进程的地址空间.这种奇怪的状态一直持续到子进程退出或调用execve(),此时父进程继续.
这意味着vfork()的子进程必须小心,以避免意外修改父进程的变量.特别是,子进程不能从包含vfork()调用的函数返回,并且它不能调用exit()(如果需要退出,它应该使用_exit();实际上,对于子进程也是如此正常的fork()).
Exec :
exec调用是一种基本上用新程序替换整个当前进程的方法.它将程序加载到当前进程空间并从入口点运行它.exec()用函数指向的可执行文件替换当前进程.除非存在exec()错误,否则控件永远不会返回到原始程序.
Clone :
克隆,作为fork,创建一个新进程.与fork不同,这些调用允许子进程与调用进程共享其执行上下文的一部分,例如内存空间,文件描述符表和信号处理程序表.
使用clone创建子进程时,它将执行函数应用程序fn(arg).(这与fork不同,fork从原始fork调用开始继续执行.)fn参数是指向子进程在执行开始时调用的函数的指针.arg参数传递给fn函数.
当fn(arg)函数应用程序返回时,子进程终止.fn返回的整数是子进程的退出代码.子进程也可以通过调用exit(2)或在收到致命信号后明确终止.
获得的信息形式:
感谢您抽时间阅读 !:)
我需要在node.js函数中
result = execSync('node -v');
Run Code Online (Sandbox Code Playgroud)
将同步执行给定的命令行并返回该命令文本的所有stdout.
PS.同步是错误的.我知道.仅供个人使用.
UPDATE
现在我们有mgutz的解决方案,它给我们退出代码,但不是stdout!仍在等待更精确的答案.
UPDATE
mgutz更新了他的答案,解决方案在这里:)
另外,正如dgo.a所提到的,有独立模块exec-sync
更新2014-07-30
ShellJS lib到了.认为这是目前最好的选择.
更新2015-02-10
最后!NodeJS 0.12原生支持execSync
.
见官方文档