有没有办法在find中的-exec中使用管道?我不希望grep通过整个文件,但只能通过每个文件的第一行.
find /path/to/dir -type f -print -exec grep yourstring {} \;
Run Code Online (Sandbox Code Playgroud)
我试图用"cat"和"head -1"把管道放在那里,但是效果不好.我尝试以某种方式使用括号,但我没有设法弄清楚如何将它们放在那里.我非常感谢你的帮助.我知道如何在不使用find的情况下以其他方式解决问题,但是我们尝试在学校使用find和pipeline来实现它,但是无法管理如何操作.
find /path/to/dir -type f -print -exec cat {} | head -1 | grep yourstring \;
Run Code Online (Sandbox Code Playgroud)
这是我们如何尝试这样做,但无法管理括号,甚至可能.我试图通过网络查看,但无法找到任何答案.
我正在尝试设置一个将触发后台进程的php触发器文件.(见这个问题)
我在Windows Wampserver环境中这样做.
所以例如我有trigger.php运行exec函数,该函数调用我的backgroundProcess.php解析和执行.
但问题是我的trigger.php文件正在等待exec()命令backgroundProcess.php在停止之前完成运行.后台进程运行大约20-30秒,并且trigger.php一直等待,直到backgroundProcess.php完全结束.
这有道理吗?这是trigger.php运行exec()命令的文件
exec('C:\wamp\bin\php\php'.phpversion().'\php.exe -f C:\path\to\backgroundProcess.php > C:\wamp\bin\php\php'.phpversion().'\dev\null &');
Run Code Online (Sandbox Code Playgroud)
基本上,我trigger.php只想触发backgroundProcess而不是等待它完成.
编辑
使用以下命令解决问题:
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("C:\wamp\bin\php\phpVERSIONNUMBER\php-win.exe -f C:/wamp/www/path/to/backgroundProcess.php", 0, false);
Run Code Online (Sandbox Code Playgroud) 作为一种构建穷人监视器的方法,并确保应用程序重新启动以防它崩溃(直到我找出原因),我需要编写一个PHP CLI脚本,每隔5mn将由cron运行以检查进程是否正常还在运行
基于此页面,我尝试了以下代码,但即使我用伪造数据调用它也总是返回True:
function processExists($file = false) {
$exists= false;
$file= $file ? $file : __FILE__;
// Check if file is in process list
exec("ps -C $file -o pid=", $pids);
if (count($pids) > 1) {
$exists = true;
}
return $exists;
}
#if(processExists("lighttpd"))
if(processExists("dummy"))
print("Exists\n")
else
print("Doesn't exist\n");
Run Code Online (Sandbox Code Playgroud)
接下来,我尝试了这段代码 ......
(exec("ps -A | grep -i 'lighttpd -D' | grep -v grep", $output);)
print $output;
Run Code Online (Sandbox Code Playgroud)
......但是没有达到我的期望:
/tmp> ./mycron.phpcli
Arrayroot:/tmp>
Run Code Online (Sandbox Code Playgroud)
FWIW,此脚本使用PHP 5.2.5的CLI版本运行,操作系统是uClinux 2.6.19.3.
谢谢你的提示.
编辑:这似乎工作正常
exec("ps aux | grep …Run Code Online (Sandbox Code Playgroud) exec(execl,execlp等)可能失败的原因是什么?如果您调用exec并返回,除了恐慌和调用exit之外,还有其他最佳实践吗?
以下作品:
def spam():
print "spam"
exec(spam.__code__)
Run Code Online (Sandbox Code Playgroud)
垃圾邮件
但如果spam需要参数呢?
def spam(eggs):
print "spam and", eggs
exec(spam.__code__)
Run Code Online (Sandbox Code Playgroud)
TypeError:spam()只需1个参数(给定0)
鉴于,我无法访问函数本身,只能访问代码对象,如何在执行代码对象时将参数传递给代码对象?是否可以使用eval?
编辑:由于大多数读者往往不相信这有用,请参阅以下用例:
我想将小Python函数保存到文件中,以便可以从另一台计算机中调用它们.(这里不用说这个用例严格限制了可能的功能.)pickle函数对象本身不起作用,因为这只保存了定义函数的名称和模块.相反,我可以腌制__code__功能.当我再次取消它时,当然对函数的引用消失了,这就是我无法调用该函数的原因.我只是在运行时没有它.
另一个用例:
我在一个文件中处理几个函数,计算一些数据并将其存储在硬盘上.计算会耗费大量时间,所以我不想每次都执行这些函数,但只有在函数的实现发生变化时才会执行.
我有一个版本的运行整个模块而不是一个功能.它通过查看实现模块的文件的修改时间来工作.但是如果我有许多我不想在单个文件中分离的函数,那么这不是一个选项.
如何使用参数在Java中执行命令?
Process p = Runtime.getRuntime().exec(new String[]{"php","/var/www/script.php -m 2"});
Run Code Online (Sandbox Code Playgroud)
不行吗?
String[] options = new String[]{"option1", "option2"};
Runtime.getRuntime().exec("command", options);
Run Code Online (Sandbox Code Playgroud)
它是否也有效,因为它没有指定"m"参数.
我可以将一个import语句放在一个字符串中,执行它,它可以工作(打印一个随机数字):
code = """
import random
def f():
print random.randint(0,9)
"""
def f():
pass
exec code
f()
Run Code Online (Sandbox Code Playgroud)
现在,如果我把exec code和f()自己的功能和调用它,这是行不通的.
def test():
exec code
f()
test()
Run Code Online (Sandbox Code Playgroud)
它说NameError: global name 'random' is not defined.知道发生了什么事吗?谢谢
出于测试目的,我想直接执行另一个函数内部定义的函数.
我可以通过父函数的代码(func_code)来获取子函数的代码对象,但是当我执行它时,我得不到返回值.
有没有办法从exec的代码中获取返回值?
我有一个程序Test.java:
import java.io.*;
public class Test {
public static void main(String[] args) throws Exception {
System.setOut(new PrintStream(new FileOutputStream("test.txt")));
System.out.println("HelloWorld1");
Runtime.getRuntime().exec("echo HelloWorld2");
}
}
Run Code Online (Sandbox Code Playgroud)
这应该将HelloWorld1和HelloWorld2打印到文件text.txt.但是,当我查看文件时,我只看到HelloWorld1.
HelloWorld2去了哪里?它消失在空气中吗?
假设我想将HelloWorld2重定向到test.txt.我不能在命令中添加">> test.txt",因为我将得到一个文件已经打开错误.那我该怎么做?