Unix/Windows, 从php代码中设置后台进程?
所以我从 http://php.net/manual/en/中找到了一个功能function.exec.php function execInBackground($cmd) { if (substr(php_uname(), 0, 7) == "Windows"){ pclose(popen("start /B ". $cmd, "r")); } else { exec($cmd . " > /dev/null &"); } } Windows用法: pclose(popen('start /B php path/to/background_cron.php', 'r')); unix用法: exec('php path/to/background_cron.php >> path/to/background_error.log &') 但是,当这些行被称为时,实际上什么也不会发生(等待5分钟后).难道我做错了什么?在激活这些行之前,
0 2023-06-03
编程技术问答社区
C++ proc_open类似物
php中有一个方便的功能,称为 proc_open .它可用于调用可执行文件,打开其stdin,stdout和stderr作为管道. 在C ++中,此功能的跨平台版本是否很好?唯一可以谷歌搜索的是 解决方案 您可能会用 获得"某个地方" popen( http://linux.die.die.net/man/3/popen ) Boost Process( ,还没有提升) 另请参见如何用boost.process 0.5? 中的流程结束程序终止 和输出C ++中的boost Process库 poco :: process launch() static ProcessHandle launch( const std::string & command, const Args & args, Pipe * inPipe, Pipe * outPipe, Pipe * errPipe ); 其他解决方案
0 2023-06-02
编程技术问答社区
没有得到POPEN的全部回应
嗨,我正在与popen一起运行一个过程; - $handle = popen('python scriptos.py', "r"); while (!feof($handle)) { $data = fgets($handle); echo "> ".$data; } ,我只从返回5行的过程中获得3行.我在CLI中运行此确切的命令,我会得到更多回复.好像它停止阅读(在工作时可能需要花费时间来完成并更新下2行,这是一个进度指标). ). 我做错了吗?是 proc_open 更合适(我已经开始尝试是否可以尝试). 解决方案 两条缺失的线可能被写入 stderr >仅返回用于Stdout的指针. 您可以使用 proc_open() 来获取用于stderr的指针C0> 线 $handle = popen('python scriptos.py 2>&1', "r"); 将stderr重定向到Stdout,因此将其包含在您的输出中.
0 2023-05-31
编程技术问答社区
popen失败,"sh: <命令>:未找到"
我正在开发服务器应用程序,最近我在测试服务器(Debian Squeeze)上遇到了此Wierd错误. 我传递给 popen 的每个可执行文件都会失败: sh: sort: not found // happens to any command 无论我指出"类型"返回的完整路径或保持短路. 如前所述,这仅在一个测试环境中发生,增加混乱,运行相同的操作系统并且没有任何问题. popen显然正在使用 sh 执行命令,但是如果我通过命令行(bash或sh)运行相同的命令,一切都很好 预先感谢 (ps:甚至尝试了python os.popen才能钉住这个头刮擦器,它有效!) 编辑 这是一个失败的简单调用: $command="tail -10 myfile"; $handle = popen($command.' 2>&1','r'); if($handle){ while (!feof($handle)){ ....//process bu
6 2023-05-30
编程技术问答社区
具有实时更新功能的php shell_exec
我有这个我想通过PHP执行的外壳程序.问题在于它可能需要很长时间,因此我需要对用户的浏览器进行实时更新. 我读到我可能需要使用popen()来做到这一点,但是我有点(好吧,我真的是:p)php noob,无法弄清楚我如何能够做到这一点. 感谢任何帮助! 解决方案 if( ($fp = popen("your command", "r")) ) { while( !feof($fp) ){ echo fread($fp, 1024); flush(); // you have to flush buffer } fclose($fp); } 其他解决方案 有一个肮脏的简易选择 `yourcommand 1>&2`; 将Stdout重定向到stderr. 其他解决方案 有两种可能的行为: 非块,您需要在冲洗之间做其他事情(@gamebit显示如何做). 使用块,您在其中等到命令命令
0 2023-05-27
编程技术问答社区
正在终止使用popen()打开的进程?
我正在与Popen()开设一个长期运行的过程.对于调试,我想在过程完成之前终止该过程.调用pclose()仅块直到孩子完成. 我该如何杀死该过程?我看不到任何简单的方法可以将PID从popen()返回的资源中取出,以便我可以向信号发送. 我想我可以做一些kludgey,并尝试使用某种命令行黑客将PID伪造到输出中... 解决方案 好吧,降落在解决方案上:我切换回 而不是popen().那么它很简单: $s = proc_get_status($p); posix_kill($s['pid'], SIGKILL); proc_close($p); 其他解决方案 只需使用杀伤功能发送杀死(或流产)信号: php http://php.net/manual/manual/en/en/function.posix -kill.php c/c ++ http://linux.die.net/man/3/kill 其他解决方案 您可以找到PID,并通过
0 2023-05-26
编程技术问答社区
uWSGI下的Python subprocess.Popen速度很慢
我已经在Fedora 14上设置了运行Cherokee的开发服务器,使用UWSGI与我的WSGI应用程序进行交互. 当应用程序键入第一个请求时,我会产生这样的过程: from subprocess import Popen Popen(['bash']) # bash is just an example; the problem happens with all programs 第一个请求需要10-15秒才能完成(随后的请求少于一秒钟). 没有创建Popen对象,第一个请求仅需要大约2-3秒即可完成.当我从python shell执行相同的popen请求时,它是瞬时的. 什么可能导致这种行为?我错过了明显的东西吗? 解决方案 否则,您的新过程将继承套接字 (这是UNIX标准行为) 其他解决方案 如果您希望在Python代码中处理此操作,则可以选择通过close_fds = true to popen()那么任何插座都不会被分叉过程继承.
0 2023-05-23
编程技术问答社区
使用相对路径的subprocess.Popen
如果cwd不是没有,则孩子的当前目录将更改为 cwd执行之前. 请注意,此目录不是 在搜索可执行文件时考虑,因此您无法指定 程序相对于cwd. 的路径 但是我系统上的Python行为似乎直接与此说法相矛盾: /tmp$ mkdir a /tmp$ cp /bin/ls /tmp/a/my_ls /tmp$ mkdir b /tmp$ touch /tmp/b/potato /tmp$ cd /home/wim ~$ python Python 2.7.5+ (default, Sep 19 2013, 13:48:49) [GCC 4.8.1] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> from subprocess import check_output >>> check_output(['../a/my_ls'], cwd='/tmp/b')
10 2023-05-21
编程技术问答社区
python subprocess Popen环境PATH?
假设有一个可执行文件和一个python脚本可以启动它,它们位于"兄弟"子目录中,例如 /tmp/subdir1/myexecutable /tmp/subdir2/myscript.py 如果在/tmp中,并且运行python subdir2/myscript.py具有可执行文件的相对路径 # myscript.py from subprocess import Popen proc = Popen(["../subdir1/myexecutable"]) 它使OSError: [Errno 2] No such file or directory. Python如何搜索可执行文件?它使用当前的工作目录和/或脚本的位置吗?它使用路径和/或pythonpath吗?您可以更改subprocess.Popen如何搜索可执行文件吗?可执行文件处理的命令,绝对和相对路径是否有所不同? Linux和Windows之间有差异吗? shell=True或shell=False影
4 2023-05-21
编程技术问答社区
Python。执行scp,密码的stdin不工作
我正在尝试以下 from subprocess import Popen, PIPE Popen(["scp", "-B","user@url:file", "."], stdin=PIPE, shell=False).communicate(input="password") ,但我仍然收到密码提示,并且没有发送密码. 我知道我可以将SCP与钥匙一起使用,但这不是我需要的. 有帮助吗? 解决方案 scp 直接与终端相互作用,而不是从 stdin 中读取,您无法通过管道传递密码,IT安全性是SCP和SFTP,SSH. 是一样的 您可以在终端中尝试(并且它将无法使用): echo "password" | scp me@localhost:test . 其他解决方案 正如其他人所说的那样,SCP(和SSH)直接从控制台而不是stdin读取密码,因此使用子程序发送密码将不起作用.您可以使用 pexpect 而不是 - 请参阅文档和许多示例.
6 2023-05-21
编程技术问答社区
如何在Windows上用Popen隐藏控制台?
我找到了这个话题,我发现这是一个解决方案: module subprocess没有属性, > 但是,当我运行代码现实时,有所不同. :/ 运行我的代码: # Get the environment variables from OO-Python using subprocess oo_py_exec = os.path.join(oo_dir, r'program\python.exe') python_oo_script = ' ;'.join([ "-cimport os", "print(os.environ['URE_BOOTSTRAP'])", "print(os.environ['UNO_PATH'])", "print(os.environ['PATH'])", ]) subprocess.STARTF_USESHOWWINDOW info = subprocess.STARTUPINFO() info.dwFlags
2 2023-05-16
编程技术问答社区
来自::popen()的ENOMEM的原因
我的应用程序主要是可行的,但是有一个条件,其中呼叫:: popen()会在ERRNO设置为INOMEM的情况下获取错误. :: popen()的男人页面将您转到:: fork()的页面,该页面本身在Linux上的简短评论列出了Enomem: The fork() function may fail if: ENOMEM Insufficient storage space is available. 我想知道我是否真的用完了内存,或者也许还有其他一些资源(例如文件描述符)?叉子()可以给Inomem以外的东西以外的其他内存,而不是系统上的实际内存?这是Centos4. 解决方案 我已经确认INOMEM是由未调用:: pclose()在重复:: popen()并最终用完的文件描述符时引起的.
0 2023-05-15
编程技术问答社区
python:非阻塞子进程,检查stdout
好,所以我要解决的问题是: 我需要运行一个带有一些标志的程序,请检查其进度并将其报告回服务器.因此,我需要我的脚本以避免程序执行时阻塞,但是我还需要能够读取输出.不幸的是,我认为Popen可用的任何方法都不会读取输出而不会阻止.我尝试了以下内容,哪个有点hack-y(我们可以从两个不同的对象读取并写入同一文件吗?) import time import subprocess from subprocess import * with open("stdout.txt", "wb") as outf: with open("stderr.txt", "wb") as errf: command = ['Path\\To\\Program.exe', 'para', 'met', 'ers'] p = subprocess.Popen(command, stdout=outf, stderr=errf) isdone = F
0 2023-04-27
编程技术问答社区
如何防止子节点进程与父节点进程一起终止?
我正在使用child_process.spawn/child_process.fork从node.js应用程序启动许多子进程.使用CTRL-C停止父进程时,孩子过程也会停止.是否有一种优雅的方法来保持孩子的流程运行? 解决方案 您可以尝试在孩子中捕捉SIGINT: // child.js process.on("SIGINT", function() { console.log("sigint caught") }); // parent.js var fork = require("child_process").fork, child = fork(__dirname + "/child.js"); 运行parent.js,然后按^C.您的child.js应继续在后台运行.我不知道在child.js的一生中会产生什么影响. 这是一个启发性的,尽管很旧.js邮件列表. 其他解决方案 您可以在父母中呼叫childprocess.disconnec
0 2023-04-24
编程技术问答社区
从python字符串中删除 。
当您通过python中的popen运行某些东西时,结果来自缓冲区,每行末尾的托架返回(13)的CR-LF小数点值.如何从python字符串中删除此? 解决方案 您可以简单地做 s = s.replace('\r\n', '\n') 用仅NL替换CRNL的所有出现,这似乎是您想要的. 其他解决方案 buffer = "\r\n" no_cr = buffer.replace("\r\n", "\n") 其他解决方案 如果它们在字符串的末端,我建议使用: buffer = "\r\n" no_cr = buffer.rstrip("\r\n") 您也可以使用RSTRIP()也无需参数即可删除空格.
2 2023-04-22
编程技术问答社区
Python'的Popen+通信只返回stdout的第一行
我正在尝试使用我的命令行GIT客户端和Python的I/O重定向,以便在许多GIT存储库上自动化一些常见的操作. (是的,这是黑客. 我希望能够捕获呼叫git的输出.隐藏输出看起来会更好,并且捕获它会让我记录下来,以防万一. 我的问题是,当我运行'git clone'命令时,我无法获得第一行输出.奇怪的是,具有" git状态"的相同代码似乎可以正常工作. 我在Windows 7上运行Python 2.7,我正在使用CMD.EXE命令解释器. 到目前为止我的侦查: 当我用" git克隆"调用subprocess.call()时,它运行正常,我 请参阅控制台上的输出(确认Git正在生产 输出,即使我没有捕获它).此代码: dir = "E:\\Work\\etc\\etc" os.chdir(dir) git_cmd = "git clone git@192.168.56.101:Mike_VonP/bit142_assign_2.git" #print "
24 2023-04-22
编程技术问答社区
如何在Python3'的Popen中读/写文件描述符?
在popen中,我可以写入stdin(0),并从stdout(1)和stderr(2)中读取. 我想做这样的事情: #!/usr/bin/env python3 from subprocess import Popen, PIPE with Popen( [ 'ffmpeg', '-f', 'matroska', '-i', 'pipe:0', '-f', 'matroska', '-i', 'pipe:3', ], stdin=PIPE, in_3=PIPE) as p: p.stdin.write(b'There is nothing special.') p.in_3.write(b'\xf0\x9f\x99\x88\xf0\x9f\x99\x89\xf0\x9f\x99\x8a') 解决方案 stderr,stdout和
24 2023-04-20
编程技术问答社区
子进程的Popen出现太多开放文件的错误
我正在使用Python的子过程模块来调用命令以从文件到内存写入值.看起来像: import subprocess f = open('memdump', 'r') content = [line.split()[1] for line in f] f.close() tbl_pt0 = 0x4400 tbl_pt1 = 0x4800 process = 0 i = 0 for value in content: p1 = subprocess.Popen("echo \"jaguar instance=0; jaguar wr offset=0x%x value=%s\" | pdt" \ % (tbl_pt0, value), shell = True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True) p2 = subprocess.Popen("echo \"jaguar inst
14 2023-04-20
编程技术问答社区