GVKun编程网logo

在PHP中调用Python(在PHP中调用函数文件,计算圆的面积)

6

在本文中,我们将详细介绍在PHP中调用Python的各个方面,并为您提供关于在PHP中调用函数文件,计算圆的面积的相关解答,同时,我们也将为您带来关于C#中调用python、C++中调用Python脚

在本文中,我们将详细介绍在PHP中调用Python的各个方面,并为您提供关于在PHP中调用函数文件,计算圆的面积的相关解答,同时,我们也将为您带来关于C#中调用python、C++中调用Python脚本、C/C++中调用python代码的一个疑问、java中调用python脚本的有用知识。

本文目录一览:

在PHP中调用Python(在PHP中调用函数文件,计算圆的面积)

在PHP中调用Python(在PHP中调用函数文件,计算圆的面积)

如何解决在PHP中调用Python?

根据您在做什么,system()或popen()可能是完美的。如果Python脚本没有输出,或者您希望Python脚本的输出直接进入浏览器,请使用system()。如果要向Python脚本的标准输入中写入数据,或者从PHP中的Python脚本的标准输出中读取数据,请使用popen()。popen()仅允许您读取或写入,而不能两者都读取。如果两者都需要,请签出proc_open(),但是在程序之间进行双向通信时,您需要小心避免死锁,因为每个程序都在等待对方执行某项操作。

如果要将用户提供的数据传递给Python脚本,那么要注意的主要事情是命令注入。如果您不小心,您的用户可以向您发送诸如“; evilcommand;”之类的数据。并让您的程序违背您的意愿执行任意命令。

escapeshellarg()和escapeshellcmd()可以帮助解决这个问题,但是我个人喜欢使用类似以下的方法删除所有不是好的字符

preg_replace(''/[^a-zA-Z0-9]/'', '''', $str)

解决方法

我有一个最近写的Python脚本,我使用命令行中的某些选项进行了调用。我现在想要一个非常薄的Web界面在Mac上本地调用此脚本。

我不想在Mac上安装mod_python或mod_wsgi时遇到麻烦,所以我只想从PHP执行system()或popen()来调用Python脚本。

还有更好的主意吗?提前致谢!

C#中调用python

C#中调用python

如果需要查看更多文章,请微信搜索公众号 csharp编程大全,需要进C#交流群群请加微信z438679770,备注进群, 我邀请你进群! ! !

为了记录自己的学习成果,防止遗忘,同时为了帮助在C#学习过程中遇到同样问题的同志们,所以将原版代码奉上!!!

开发环境:vs2015

准备工作:

  1. 下载并安装Ironpython

  2. 创建控制台应用程序

  3. 添加文本文件,并命名为test.py

  4. 添加引用:引用IronPython.dll,Microsoft.Scripting.dll 两个dll文件

     

控制台程序代码:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

//引用需要的命名空间

using IronPython.Hosting;

using Microsoft.Scripting.Hosting;

 

namespace ConsoleApplication3

{

    class Program

    {

        static void Main(string[] args)

        {

            /*执行bin目录下test.py*/

            /*ScriptEngine pyEngine = Python.CreateEngine();//创建Python解释器对象

   .........

C++中调用Python脚本

C++中调用Python脚本

下面是小编 jb51.cc 通过网络收集整理的代码片段。

小编小编现在分享给大家,也给大家做个参考。

C++中调用Python脚本的意义就不讲了,至少你可以把它当成文本形式的动态链接库,

需要的时候还可以改一改,只要不改变接口, C++的程序一旦编译好了,再改就没那么方便了

先看Python的代码
代码:
#test function

def add(a,b):

  print "in python function add"

  print "a = " + str(a)

  print "b = " + str(b)

  print "ret = " + str(a+b)

  return



def foo(a):

  print "in python function foo"

  print "a = " + str(a)

  print "ret = " + str(a * a)

  return


把上面的Python代码存为pytest.py

接下来是c++ 的代码
代码:
#include "Python.h"

int main(int argc,char** argv)
{
  // 初始化Python
  //在使用Python系统前,必须使用Py_Initialize对其
  //进行初始化。它会载入Python的内建模块并添加系统路
  //径到模块搜索路径中。这个函数没有返回值,检查系统
  //是否初始化成功需要使用Py_IsInitialized。

  Py_Initialize();

  // 检查初始化是否成功
  if ( !Py_IsInitialized() )
  {
    return -1;
  }

  // 添加当前路径
  //把输入的字符串作为Python代码直接运行,返回0
  //表示成功,-1表示有错。大多时候错误都是因为字符串
  //中有语法错误。
  PyRun_SimpleString("import sys");
  PyRun_SimpleString("sys.path.append('./')");
  PyObject *pName,*pModule,*pDict,*pFunc,*pArgs;

  // 载入名为pytest的脚本
  pName = PyString_FromString("pytest");
  pModule = PyImport_Import(pName);
  if ( !pModule )
  {
    printf("can't find pytest.py");
    getchar();
    return -1;
  }
  pDict = PyModule_GetDict(pModule);
  if ( !pDict )
  {
    return -1;
  }

  // 找出函数名为add的函数
  pFunc = PyDict_GetItemString(pDict,"add");
  if ( !pFunc || !PyCallable_Check(pFunc) )
  {
    printf("can't find function [add]");
    getchar();
    return -1;
  }

  // 参数进栈
  pArgs = PyTuple_New(2);

  // PyObject* Py_BuildValue(char *format,...)
  // 把C++的变量转换成一个Python对象。当需要从
  // C++传递变量到Python时,就会使用这个函数。此函数
  // 有点类似C的printf,但格式不同。常用的格式有
  // s 表示字符串,
  // i 表示整型变量,
  // f 表示浮点数,
  // O 表示一个Python对象。

  PyTuple_SetItem(pArgs,Py_BuildValue("l",3));
  PyTuple_SetItem(pArgs,1,4));

  // 调用Python函数
  PyObject_CallObject(pFunc,pArgs);

  //下面这段是查找函数foo 并执行foo
  pFunc = PyDict_GetItemString(pDict,"foo");
  if ( !pFunc || !PyCallable_Check(pFunc) )
  {
    printf("can't find function [foo]");
    getchar();
    return -1;
  }

  pArgs = PyTuple_New(1);
  PyTuple_SetItem(pArgs,2)); //

  PyObject_CallObject(pFunc,pArgs);


  Py_DECREF(pName);
  Py_DECREF(pArgs);
  Py_DECREF(pModule);

  // 关闭Python
  Py_Finalize();
  return 0;
}


编译选项,需要手动指定Python 的include 路径, 和链接接路径,
代码:
g++ Python.cpp -o Python -I/usr/include/python2.5 -L/usr/lib/python2.5 -lpython2.5

如果你的Python 版本号与我的不同,请修改为你自己的版本号.

原文地址: C++中调用Python脚本(转载) 作者: tianxai

以上是小编(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得小编网站内容还不错,欢迎将小编网站推荐给程序员好友。

C/C++中调用python代码的一个疑问

C/C++中调用python代码的一个疑问

我希望在C++中设置一个给python调用的全局变量,比如:

python代码文件有两个,一个是hello.py,里面预存了一些无关信息;

另一个文件是print.py,代码就一句话:print(Key)

c++代码如下:

PyObject* pMod, *pDict, *pArg, *pName;
pMod = PyImport_ImportModule("hello");
pDict = PyModule_GetDict(pMod);
pArg = Py_BuildValue("s","welcome");
PyObject_SetAttrString(pMod,"Key",pArg);//设置Key的值为welcome

我希望加载print.py的时候,能把这个key打印出来,不知道该如何加载print.py,试了很多方法都不行。

java中调用python脚本

java中调用python脚本

在java中调用python脚本有三种方式

【方式一】:

直接执行Python脚本代码   引用 org.python包

1 PythonInterpreter interpreter = new PythonInterpreter();  
2 interpreter.exec("days=(''mod'',''Tue'',''Wed'',''Thu'',''Fri'',''Sat'',''Sun''); ");   ///执行python脚本

【方式二】:

执行python .py文件

1 PythonInterpreter interpreter = new PythonInterpreter();  
2 InputStream filepy = new FileInputStream("D:\\demo.py"); 
3 interpreter.execfile(filepy);  ///执行python py文件
4 filepy.close();

【方式三】:

对于前两种方式可能存在以下问题:

当python调用第三方函数库的时候,不能调用。但是通过第三种方式可以解决。

直接上代码:

1.java代码部分

public static void Test1() throws Exception {
        //TODO:执行python脚本  
        System.out.println("start python");  
        //需传入的参数  
        String a = "aaa", b = "bbb", c = "ccc", d = "中国";  
//        System.out.println("start;;;" + a);  
        //设置命令行传入参数  
        String[] argv = new String[] { "python", "data/pythonScrip/test1.py", a, b, c, d };  
        Process pr = Runtime.getRuntime().exec(argv);  
        System.err.println("pr:"+pr);
        BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"GBK"));  
        System.err.println("in:"+in);
        String line;  
//        System.err.println(in.lines().count());
        while ((line = in.readLine()) != null) {  
            System.out.println("line:"+line);  
        }  
        in.close();  
        pr.waitFor();  
        System.out.println("end");  
    }

2.python代码部分(test1.py)

import sys  
print("======")
print(sys.argv[0])  
print(sys.argv[1])  
print(sys.argv[2])  
print(sys.argv[3]) 
print(sys.argv[4]) 
3.输出结果

调用第三方函数库案例

1.java代码部分

public static void Test1() throws Exception {
        //TODO:执行python脚本  
        System.out.println("start python");  
        //需传入的参数  
        String a = "F:/6-日志/20170822_主题相关进阶/Demo/w2v_java_call/bd/w2v_bd.model", b = "一带一路";  
//        System.out.println("start;;;" + a);  
        //设置命令行传入参数  
        String[] argv = new String[] { "python", "data/pythonScrip/w2v_java.py", a, b}; 
        Process pr = Runtime.getRuntime().exec(argv);  
        System.err.println("pr:"+pr);
     BufferedReader in = new BufferedReader(new InputStreamReader(pr.getInputStream(),"GBK")); 
        System.err.println("in:"+in);
        String line;  
//        System.err.println(in.lines().count());
        while ((line = in.readLine()) != null) {  
            System.out.println("line:"+line);  
        }  
        in.close();  
        pr.waitFor();  
        System.out.println("end");  
    }

2.Python代码部分

from gensim.models import word2vec   #调用第三方函数库
import sys  
# def get_vector(word,model):
print (sys.argv[0])       #读取动态参数,作为python脚本的输入
print (sys.argv[1])
print (sys.argv[2])
model = word2vec.Word2Vec.load(sys.argv[1])
vector=model[sys.argv[2]]
print(vector)

输出结果

 

 

 

关于在PHP中调用Python在PHP中调用函数文件,计算圆的面积的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于C#中调用python、C++中调用Python脚本、C/C++中调用python代码的一个疑问、java中调用python脚本的相关信息,请在本站寻找。

本文标签: