使用php/node/python脚本启动/B';I don’我没有按预期工作
我启动一个shell并运行以下命令:使用php/node/python脚本启动/B';I don’我没有按预期工作,php,windows,shell,batch-file,command-line,Php,Windows,Shell,Batch File,Command Line,我启动一个shell并运行以下命令: START "" /B php test.php>nul 2>&1 在本文中,test.php由1行组成:file_put_contents(“test”,“test”) 您可能希望它立即创建一个名为test的文件,但它没有。 相反,当我输入命令并按enter键时,什么也没有发生。但是,在同一命令窗口中,如果我再次按enter键,脚本将运行 我用node、python2和python3尝试了等效的命令。它们都做同样的事情,尽管pytho
START "" /B php test.php>nul 2>&1
在本文中,test.php由1行组成:file_put_contents(“test”,“test”)
您可能希望它立即创建一个名为test的文件,但它没有。
相反,当我输入命令并按enter键时,什么也没有发生。但是,在同一命令窗口中,如果我再次按enter键,脚本将运行
我用node、python2和python3尝试了等效的命令。它们都做同样的事情,尽管python3在脚本运行之前需要按两次enter键
在使用脚本解释器运行START/B时,这似乎是一个怪癖。如果我使用.exe或.bat运行START/B,则它将按预期运行
现在,显然我不需要运行后台进程来创建名为“test”的文件。我需要它做的是在同一个终端中依次启动用php编写的守护进程和用nodejs编写的守护进程
我还注意到,如果我将这些命令写入一个批处理文件,并通过双击批处理文件而不是从shell调用来运行它们,那么所有这些命令都会按预期运行
请帮忙。我已经为这个问题绞尽脑汁两天了
编辑:
我刚刚发现这个问题是我运行在Windows10上的计算机所独有的。我在Windows7和WindowsXP上试过,它们不需要我额外的返回输入来运行脚本
我刚刚尝试在安全模式下启动并清除路径变量。但它依然存在。
我想知道这是否是Windows10的一个bug/功能?
我该如何诊断和修复这个问题
编辑2:
刚刚在Windows8机器上测试了相同的脚本,它出乎意料地与我的Windows10机器完全相同。所以看起来只有Windows 8和Windows 10有这个问题。。。而使用传统模式也没什么区别。
什么是FFFFFFFFNNNGGGGHHRR。。。我找不到任何人报告这个问题
下面是一个gif动画,精确描述了发生的情况:
证明脚本仅在第二次按回车键时运行。
start/b
启动另一个进程,该进程与原始窗口共享输入和输出。(要验证dostart/b”“提示$G
并反复按Return键)
最好在另一个窗口中启动辅助进程(无/b
-使用/min
来运行它)。您还应该让它退出,否则它将保持打开状态:
start /min "" echo hello^>hello.txt^&Exit
注意:如果您没有逃逸特殊字符,如
,&
,
,…,它们将由“开始”处理-换句话说,在您的原始上下文中,而不是在新启动的进程中。您可以尝试我在这里看不到任何问题。
也许您的cmd.exe被一些测试损坏了。
对于测试,我打开了一个新的cmd窗口
我试过了
test.php
我也遇到了类似的问题,在试图找到答案时,我偶然发现了这个问题
在我的例子中,我试图使用“popen”从PHP运行windows命令。
我最近从8升级了Wampserver和Windows 10。
我的代码在升级之前工作,随后超时。
我在命令行上也发现了同样的问题——必须输入新行才能接收输出
我的解决方案有两个方面:
1.在命令行中,我发现添加“/wait”开关修复了这个问题。
2.PHP使用的shell与cmd shell的路径不同。我的php.exe路径定义了两次,我的旧版本Wampserver有一个旧条目。所以我把它拿走了。注意:我必须重新启动PC才能正确更新路径。如果删除>NUL2>&1
,它会做什么?这肯定与>NUL2>&1
有关。我认为第一个>nul
没有正确地转义,请尝试。尝试自己直接将其输入控制台,您应该会体验到相同的异常行为:START”“/B php test.php>nul 2>&1不会在第一次返回时运行。我已经修改了我的帖子,看起来它对我来说是独一无二的,但仍然无法修复它。。。请帮帮我。好吧,我刚刚意识到这个问题不是我独有的,而是Windows 8和10操作系统的问题。完全不知所措…你在运行哪个操作系统?我只在Windows 8和10上有这个问题,恐怕它的运行与以前完全一样。仍然需要在以下空白处按return键command@hedgehog90请参阅我的编辑。我们将反复试验这件事。:)我刚刚给了你50分,我怀疑如果不直接问微软,我们是否能弄清原因。感谢您的帮助:)问题是我实际上想要运行的php脚本是一个套接字侦听器,额外的CMD窗口需要保持打开状态。我想我在我的OP中说过,我还需要一个运行的节点脚本实例,这样总共可以创建3个CMD窗口。好吧,然后忘记退出。关键是要在它自己的窗口中运行脚本-没有“共享输入”(我没有php,但我很确定这不是问题所在。是“共享输入”起作用-很奇怪)
start "" /b php test.php <NUL
<?php
echo "Hello";
?>
start "myTitle" /b php test.php