例:
ClassName.php
<?php echo "This will crash all"; ?>
Run Code Online (Sandbox Code Playgroud)
在另一个档案中......
foreach ($FILENAMES_WITHOUT_DOT_PHP as $name => $value) {
if (class_exists( $value )) {
echo "ClassName exists...";
}
else {
echo "ClassName doesn't exists....";
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码的输出是: 这会崩溃所有
而不是这样: ClassName不存在....
自动加载功能:
function __autoload( $var_class )
{
require_once( "$var_class.php") ;
}
Run Code Online (Sandbox Code Playgroud) 我在SO上查看了无数的"Python exec"主题,但找不到能解决我问题的主题.非常抱歉,如果之前有人问过这个问题.这是我的问题:
# Python 2.6: prints 'it is working'
# Python 3.1.2: "NameError: global name 'a_func' is not defined"
class Testing(object):
def __init__(self):
exec("""def a_func():
print('it is working')""")
a_func()
Testing()
Run Code Online (Sandbox Code Playgroud)
# Python 2.6: prints 'it is working'
# Python 3.1.2: prints 'it is working'
class Testing(object):
def __init__(self):
def a_func():
print('it is working')
a_func()
Testing()
Run Code Online (Sandbox Code Playgroud)
由于标准函数定义适用于两个Python版本,我假设问题必须是对exec工作方式的改变.我阅读了2.6和3的API文档,并exec阅读了"Python 3.0中的新功能"页面,并且看不出代码中断的任何原因.
python metaprogramming exec backwards-compatibility python-3.x
我正在寻找一种最有效的方法来决定:
众所周知,要从Java启动shell脚本,应该启动shell:
ProcessBuilder pb = new ProcessBuilder("/bin/sh", "script.sh", "arg1", "arg2);
Run Code Online (Sandbox Code Playgroud)
要启动二进制文件,应该启动二进制文件:
ProcessBuilder pb = new ProcessBuilder("/path/binary", "arg1", "arg2);
Run Code Online (Sandbox Code Playgroud)
如果使用shell执行二进制文件,则会产生错误:
ProcessBuilder pb = new ProcessBuilder("/bin/sh", "/path/binary", "arg1", "arg2);
(sh: cannot execute binary file)
Run Code Online (Sandbox Code Playgroud)
如果在没有shell二进制文件的情况下执行shell脚本,则会产生错误:
ProcessBuilder pb = new ProcessBuilder("script.sh", "arg1", "arg2);
(error 2: file not found)
Run Code Online (Sandbox Code Playgroud)
我的情况是我的应用程序不知道它的启动,二进制或脚本.
启动的应用程序是最终用户提供的事件处理程序.它很可能是在Unix下执行的shell脚本; 但它可以是Windows下的*.cmd,或者是在一些不起眼的平台下执行的Perl脚本.毕竟它是Java.
我的第一个天真的尝试是用shell启动命令行,看它是否有效.如果没有,请尝试将其作为二进制文件执行.
这是丑陋和冒险的:在平台和shell的一些未知组合下,第二次运行仍然可能仍然执行脚本,第二次,具有不可预测的结果.
此外,我无法判断脚本何时启动正常并且由于某些问题而失败,因为我无法启动它.
我现在正在考虑的最好的事情是:
如果您有任何更好的想法,请告知.
更新/部分解决方案
感谢所有与我分享他们想法的人.
事实证明,我把自己和互联网的其他部分弄糊涂了:)
在用户输入的命令行之前不需要在应用二进制文件前加前缀,前提是:
当我测试我的代码时,这些条件中的一个或另一个没有达到.:-(
从临时脚本执行测试后,脚本已经执行完毕.
第3点只能由用户完成,并且必须在用户手册中记录.
由于这些脚本传播到目标系统的方式,它们可能不可执行,可能不在PATH中.
我关心的唯一路径是相对路径,因此将./添加到任何相对路径就足够了.
使脚本在Unix(以及任何其他平台)下可执行是一个更大的挑战.这不是WORA.在它前面放置/ bin/sh可能会有所帮助,但如果我记得在Solaris下,shell将不会执行不可执行的脚本. …
我只使用apache-ant而不是 ant-contrib
我有一个ant目标
<target name="stop" depends="init" >
...
</target>
Run Code Online (Sandbox Code Playgroud)
我想在其中调用exec任务.
如果变量的值HOST_NAME是all
<exec executable="${executeSSH.shell}" >
<arg value="-h ${HOST_NAME}" />
<arg value="-i ${INSTANCE}" />
<arg value="-w 10" />
<arg value="-e ${myOperation.shell} " />
<arg value=" -- " />
<arg value="${INSTANCE} ${USERNAME} ${PASSWORD}" />
</exec>
Run Code Online (Sandbox Code Playgroud)
如果变量的值HOST_NAME是anything else
<exec executable="${executeSSH.shell}">
<arg value="-h ${HOST_NAME}" />
<arg value="-i ${INSTANCE}" />
<arg value="-e ${myOperation.shell} " />
<arg value=" -- " />
<arg value="${INSTANCE} ${USERNAME} …Run Code Online (Sandbox Code Playgroud) 我想从数据库创建备份,但我只得到一个空白文件.
include('config.php');
$command = "mysqldump --opt -h ".$_host." -u ".$_user." -p ".$_pass." ".$_db." > test.sql";
exec($command);
echo "<br />".$command;
Run Code Online (Sandbox Code Playgroud)
在.php文件所在的位置创建test.sql.
编辑:
注意!我正在使用XAMPP WINDOWS!
解:
因为我使用的是Windows Web服务器(XAMPP),所以我需要指定路径:
$command = 'd:\xampp\mysql\bin\mysqldump --opt -u '.$_user.' -p'.$_pass.' '.$_db.' > test.sql';
Run Code Online (Sandbox Code Playgroud)
-pMYPASSWORD"为'我想如果您使用的是基于Linux的Web服务器,则不必指定mysqldump的路径.
干杯! :-)
我在我的php脚本中调用它:
exec("gutschein.php >/dev/null 2>&1 &");
Run Code Online (Sandbox Code Playgroud)
调用脚本(生成pdf并通过电子邮件发送)可以正常工作,但是进程没有在后台运行(我在gutschein.php中使用sleep语句检查了它).浏览器一直挂起,直到执行gutschein.php完成.
我还检查了以下内容:
exec("/usr/bin/php gutschein.php >/dev/null 2>&1 &");
Run Code Online (Sandbox Code Playgroud)
要么
shell_exec("/usr/bin/php gutschein.php >/dev/null 2>&1 &");
Run Code Online (Sandbox Code Playgroud)
它没有改变任何东西.该脚本实际上是在linux服务器上运行的.有谁知道我做错了什么?
如何从Swift脚本调用外部命令(启动子进程)?
也许就像call(["ls", "-l"])在Python中一样.
情况:
我想运行一个将自己置于后台的命令.如果它更有可能,那么我将在前台运行命令并将其自己带入后台.
题:
当进程在后台运行时:我怎样才能pid使用Go?
我尝试了以下方法:
cmd := exec.Command("ssh", "-i", keyFile, "-o", "ExitOnForwardFailure yes", "-fqnNTL", fmt.Sprintf("%d:127.0.0.1:%d", port, port), fmt.Sprintf("%s@%s", serverUser, serverIP))
cmd.Start()
pid := cmd.Process.Pid
cmd.Wait()
Run Code Online (Sandbox Code Playgroud)
这会立即返回并ssh在后台运行.但这pid不是pid正在运行的ssh过程.而且,它是pid父ssh进程之前的分叉和后台.
所以,我试图在我的Laravel 5.3中运行一个python脚本.
这个功能在我的Controller里面.这只是将数据传递给我的python脚本
public function imageSearch(Request $request) {
$queryImage = 'c:\\\xampp\\\htdocs\\\identificare_api\\\public\\\gallery\\\herbs\\\query.png'; //queryImage
$trainImage = 'c:\\\xampp\\\htdocs\\\identificare_api\\\public\\\gallery\\\herbs\\\2nd.png'; //trainImage
$trainImage1 = 'c:\\\xampp\\\htdocs\\\identificare_api\\\public\\\gallery\\\herbs\\\3rd.png';
$trainImage2 = 'c:\\\xampp\\\htdocs\\\identificare_api\\\public\\\gallery\\\herbs\\\4th.jpg';
$trainImage3 = 'c:\\\xampp\\\htdocs\\\identificare_api\\\public\\\gallery\\\herbs\\\1st.jpg';
$data = array
(
array(0, $queryImage),
array(1, $trainImage),
array(3, $trainImage1),
array(5, $trainImage2),
array(7, $trainImage3),
);
$count= count($data);
$a = 1;
$string = "";
foreach( $data as $d){
$string .= $d[0] . '-' . $d[1];
if($a < $count){
$string .= ",";
}
$a++;
}
$result = shell_exec("C:\Python27\python c:\xampp\htdocs\identificare_api\app\http\controllers\ORB\orb.py " . escapeshellarg($string));
echo $result;
}
Run Code Online (Sandbox Code Playgroud)
我的python脚本是一个ORB算法,它在将火车图像与查询图像进行比较后返回最小距离及其id.所以,这是我的python脚本:
import …Run Code Online (Sandbox Code Playgroud) exec ×10
php ×4
go ×2
python ×2
ant ×1
apache ×1
autoload ×1
background ×1
fork ×1
if-statement ×1
java ×1
mysql ×1
mysqldump ×1
orb ×1
pid ×1
process ×1
python-3.x ×1
shell ×1
shell-exec ×1
swift ×1