精华内容
下载资源
问答
  • QtScript脚本与C++代码交互

    千次阅读 2015-05-18 14:58:46
    QtScript 模块起源于 QSA,Qt4.6时,QtScript 进行过完全重写。原来的QtScript 以 Qt Script classic的名字放到了 Qt Solutions ...为简单起见,假定所有的script文件都已被读入到一个字符串 创建一个 QScriptEn

    QtScript 模块起源于 QSA,在Qt4.6时,QtScript 进行过完全重写。原来的QtScript 以 Qt Script classic的名字放到了 Qt Solutions 中。

    对 javascript 几乎一窍不通,主要学习一下 脚本代码 与 C++ 代码的整合。

    练习一

    • 为简单起见,假定所有的script文件都已被读入到一个字符串中
    • 创建一个 QScriptEngine 的实例
    • 执行 script脚本
    • 脚本结果存放在 QScriptValue 中

     

    #include <QtCore/QCoreApplication>
    #include <QtCore/QDebug>
    #include <QtScript>
    
    const char script[]="1+2";
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QScriptEngine engine;
        QScriptValue res = engine.evaluate(script);
        if (res.isError())
            qDebug()<<"Error";
        else
            qDebug()<<res.toNumber();
    
        return a.exec();
    }

    错误处理

    当脚本执行出错时,返回一个Error对象,就像我们前面所做的,使用 isError 可判断。但若要获得更多的出错信息:

    #include <QtCore/QCoreApplication>
    #include <QtCore/QDebug>
    #include <QtScript>
    
    const char script[]="1+a";
    
    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
        QScriptEngine engine;
        QScriptValue res = engine.evaluate(script);
        if (engine.hasUncaughtException()){
            qDebug()<<engine.uncaughtException().toString();
            qDebug()<<engine.uncaughtExceptionBacktrace().join("/n");
        }else{
            qDebug()<<res.toNumber();
        }
    
        return a.exec();
    }

    可以使用 hasUncaughtException 来进行判断。程序结果如下:

    "ReferenceError: Can't find variable: a"
    "<anonymous>()@:1"

    如果我们这儿的脚本是从hello.js文件的第3行读入的,我们可以传递额外的信息:

    QScriptValue res = engine.evaluate(script, "hello.js", 3);

    这样会得到更友好的信息:

    "ReferenceError: Can't find variable: a"
    "<anonymous>()@hello.js:3"

    globalobject()

    这也是一个 QScriptValue,通过设置它的属性,可以在脚本中访问C++中的数据和对象

    接前面的例子,在执行脚本前,添加一句:

    engine.globalObject().setProperty("a", 797);

    使得整数797在脚本中作为a被访问,这样错误即可消失。

    练习二

    • 在C++ 中通过信号槽使用 script 中的函数
    • 效果:点击按钮,调用 script 中的函数。

     

    #include <QtGui>
    #include <QtScript>
    
    const char script[]="(function() { print('hello script'); })";
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        QPushButton button("Click Me");
        QScriptEngine engine;
        QScriptValue func = engine.evaluate(script);
        qScriptConnect(&button, SIGNAL(clicked()), engine.globalObject(), func);
        button.show();
        return app.exec();
    }
    • 信号槽的连接,使用 qScriptConnect 函数,大致和QObject::connect用法差不多。只不过后两个参数都是 QScriptValue 对象了。
    • 为了代码少点,此处有意省略了错误检查。在这是代码中是不可少的,不然可能都不知道自己怎么死的 :-)

    注意:

    • 我们的脚本被一对圆括号扩住了,而这在Qt4.5及以前是不需要的,因为Qt4.6采用 javascriptcore核心改写,故采用了和 javascript 的eval一致的用法。
    • 或者,不使用匿名函数

     

    const char script[]="f = function() { print('hello script'); }";

    练习三

    • 使我们的QObject子类的对象在脚本中能够被访问

     

    #include <QtCore>
    #include <QtGui>
    #include <QtScript>
    
    const char script[]="lineedit.setText('hello script')";
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        QLineEdit lineEdit;
        QScriptEngine engine;
        QScriptValue edit = engine.newQObject(&lineEdit);
        engine.globalObject().setProperty("lineedit", edit);
        engine.evaluate(script);
    
        lineEdit.show();
        return app.exec();
    }
    • 通过 QScriptEngine 的 newQObject 为对象创建一个包装器(一个QScriptValue)
    • 将该包装器设置为 globalObject 的属性,使得对象能以 lineedit 名字在脚本中被访问

    练习四

    • 在脚本中连接信号与槽

     

    #include <QtCore>
    #include <QtGui>
    #include <QtScript>
    
    const char script[]="var obj = {fun:function(){print('hello script');}};"
                        "btn.clicked.connect(obj, 'fun')";
    
    int main(int argc, char *argv[])
    {
        QApplication app(argc, argv);
        QPushButton button("Click Me");
        QScriptEngine engine;
        QScriptValue btn = engine.newQObject(&button);
        engine.globalObject().setProperty("btn", btn);
        engine.evaluate(script);
        button.show();
        return app.exec();
    }

    上面的 btn.clicked.connect(obj, 'fun') 也可写为

    btn.clicked.connect(obj.fun)

    发射信号

    脚本中发射信号,直接调用信号函数即可。

    const char script[]="var obj = {fun:function(){print('hello script');}}/n"
                        "btn.clicked.connect(obj, 'fun')/n"
                        "btn.clicked()";

    信号必须在C++中定义,script中不能定义信号

    展开全文
  • 这篇文章主要介绍了ASP.NET常见文件类型、扩展名、存放位置及用途总结,ASP.NET各种扩展名的文件比较多,通过本文可以快速了解它们的作用,需要的朋友可以参考下 .asax 应用程序根目录。 通常是 Global.asax ...
    

    这篇文章主要介绍了ASP.NET中常见文件类型、扩展名、存放位置及用途总结,ASP.NET中各种扩展名的文件比较多,通过本文可以快速了解它们的作用,需要的朋友可以参考下

    .asax

    应用程序根目录。
    通常是 Global.asax 文件,该文件包含从 HttpApplication 类派生并表示该应用程序的代码。
    有关更多信息,请参见 Global.asax 语法。

    .ascx

    应用程序根目录或子目录。
    Web 用户控件文件,该文件定义自定义、可重复使用的用户控件。
    有关更多信息,请参见 ASP.NET 用户控件。

    .ashx

    应用程序根目录或子目录。
    一般处理程序文件,该文件包含实现 IHttpHandler 接口以处理所有传入请求的代码。
    有关更多信息,请参见 HTTP 处理程序介绍。

    .asmx

    应用程序根目录或子目录。
    XML Web services 文件,该文件包含通过 SOAP 方式可用于其他 Web 应用程序的类和方法。
    有关更多信息,请参见 XML Web 服务的发布和部署。

    .aspx

    应用程序根目录或子目录。
    ASP.NET Web 窗体文件,该文件可包含 Web 控件和其他业务逻辑。
    有关更多信息,请参见 ASP.NET 网页和 ASP.NET Web 服务器控件。

    .axd

    应用程序根目录。
    跟踪查看器文件,通常是 Trace.axd。
    有关更多信息,请参见 ASP.NET 跟踪。

    .browser

    App_Browsers 子目录。
    浏览器定义文件,用于标识客户端浏览器的启用功能。
    有关更多信息,请参见 ASP.NET Web 服务器控件和浏览器功能。

    .cd

    应用程序根目录或子目录。
    类关系图文件。
    有关更多信息,请参见使用类关系图。

    .compile

    Bin 子目录。
    预编译的 stub(存根)文件,该文件指向相应的程序集。可执行文件类型(.aspx、ascx、.master、主题文件)已经过预编译并放在 Bin 子目录下。
    有关更多信息,请参见 ASP.NET 网站预编译概述。

    .config

    应用程序根目录或子目录。
    通常是 Web.config 配置文件,该文件包含其设置配置各种 ASP.NET 功能的 XML 元素。
    有关更多信息,请参见 ASP.NET 配置文件。

    .cs、.jsl、.vb

    App_Code 子目录;但如果是 ASP.NET 页的代码隐藏文件,则与网页位于同一目录。
    运行时要编译的类源代码文件。类可以是 HTTP 模块、HTTP 处理程序,或者是 ASP.NET 页 HTTP 处理程序介绍的代码隐藏文件。

    .csproj、.vbproj、vjsproj

    Visual Studio 项目目录。
    Visual Studio 客户端应用程序项目的项目文件。
    有关更多信息,请参见项目和解决方案。

    .disco、.vsdisco

    App_WebReferences 子目录。
    XML Web services 发现文件,用于帮助定位可用的 Web services。
    有关更多信息,请参见 XML Web 服务的发布和部署。

    .dsdgm、.dsprototype

    应用程序根目录或子目录。
    分布式服务关系图 (DSD) 文件,该文件可以添加到任何提供或使用 Web services 的 Visual Studio 解决方案,以便对 Web service 交互的结构视图进行反向工程处理。
    有关更多信息,请参见 XML Web 服务的发布和部署。

    .dll

    Bin 子目录。
    已编译的类库文件。或者,可以将类的源代码放在 App_Code 子目录下。
    有关更多信息,请参见 ASP.NET 网站中的共享代码文件夹。

    .licx、.webinfo

    应用程序根目录或子目录。
    许可证文件。控件创作者可以通过授权方法来检查用户是否得到使用控件的授权,从而帮助保护自己的知识产权。
    有关更多信息,请参见如何:License 组件和控件。

    .master

    应用程序根目录或子目录。
    母版页,它定义应用程序中引用母版页的其他网页的布局。
    有关更多信息,请参见 ASP.NET 母版页。

    .mdb、.ldb

    App_Data 子目录。
    Access 数据库文件。
    有关更多信息,请参见通过 ASP.NET 访问数据。

    .mdf

    App_Data 子目录。
    SQL 数据库文件。
    有关更多信息,请参见通过 ASP.NET 访问数据。

    .msgx、.svc

    应用程序根目录或子目录。
    Indigo Messaging Framework (MFx) service 文件。

    .rem

    应用程序根目录或子目录。
    远程处理程序文件。
    有关更多信息,请参见使用 SOAP 扩展修改 SOAP 消息。

    .resources

    App_GlobalResources 或 App_LocalResources 子目录。
    资源文件,该文件包含指向图像、可本地化文本或其他数据的资源字符串。
    有关更多信息,请参见应用程序中的资源或如何:为 ASP.NET 网站创建资源文件。

    .resx

    App_GlobalResources 或 App_LocalResources 子目录。
    资源文件,该文件包含指向图像、可本地化文本或其他数据的资源字符串。
    有关更多信息,请参见应用程序中的资源或如何:为 ASP.NET 网站创建资源文件。

    .sdm、.sdmDocument

    应用程序根目录或子目录。
    系统定义模型 (SDM) 文件。
    有关更多信息,请参见系统定义模型 (SDM) 概述。

    .sitemap

    应用程序根目录。
    站点地图文件,该文件包含网站的结构。ASP.NET 中附带了一个默认的站点地图提供程序,它使用站点地图文件可以很方便地在网页上显示导航控件。
    有关更多信息,请参见 ASP.NET 站点导航。

    .skin

    App_Themes 子目录。
    用于确定显示格式的外观文件。
    有关更多信息,请参见 ASP.NET 主题和外观。

    .sln

    Visual Web Developer 项目目录。
    Visual Web Developer 项目的解决方案文件。
    有关更多信息,请参见项目和解决方案。

    .soap

    应用程序根目录或子目录。
    SOAP 扩展文件。
    有关更多信息,请参见使用 SOAP 扩展修改 SOAP 消息。

    展开全文
  • 类Flask实现前后端交互代码聊天室

    万次阅读 2017-06-01 09:18:25
    总结前言这两天老是做梦,全根Python有关,这不昨晚梦见我把Python做成了类似于JavaScript一样的功能,前端混的风生水起。结果是个梦。。。。。。第一次接触了Flask之后,就被它优雅的路由映射给俘获了。后来我...

    前言

    这两天老是做梦,全根Python有关,这不昨晚梦见我把Python做成了类似于JavaScript一样的功能,在前端混的风生水起。结果是个梦。。。。。。

    在第一次接触了Flask之后,就被它优雅的路由映射给俘获了。后来我自己又搜索了相关的知识点,算是勉强做出一个最最简化的版本。详细的内容可以查看我的这篇文章。
    http://blog.csdn.net/marksinoberg/article/details/72811360

    关于昨晚的梦,早上醒来倒是给了我一个灵感,为什么不能做出一个代码聊天室呢? 说着可能有点让人摸不着头脑,其实说白了,就是一个本地的代码执行环境。大致的模样应该是这个样子的。

    代码聊天室

    “框架”?

    项目目录及各自功能

    说到底,这根本不能算是一个框架,充其量也只能是一个工具集吧。项目目录也比较简单。如下:

    C:\Users\biao\Desktop\笔记\code-chatter>tree /f .
    文件夹 PATH 列表
    卷序列号为 E0C6-0F15
    C:\USERS\BIAO\DESKTOP\笔记\CODE-CHATTER
    │  .gitignore
    │  backend.py              # 服务后台
    │  executor.py             # 客户端代码执行工具
    │  server.py               # 后台web应用处理器
    │  temp.py                 # 客户端临时代码存放
    │  test.py                 # 测试相关文件
    │
    ├─templates
    │      index.css
    │      index.html
    │      index.js
    │      jquery-2.2.4.min.js
    └─

    流程图

    大致来说,软件工作的流程如下:
    软件工作流程图

    由于作图工具的问题,原本应该双向交互的对象只画出了单个箭头。不过看到这个图后,这个软件的工作流程应该就不难理解了。

    后端

    基本上来说后端是重中之重啦。接下来一一的介绍一下吧。

    server

    按照WSGI标准, 一个WEB应用程序或者框架应该满足如下条件:
    - 本身为一个对象(函数,类init,对象call)
    - 有env, start_response两个参数(当然名字可以不固定)
    - 返回对象可迭代

    我这里借助了对象的形式来实现,在__call__方法中添加了处理逻辑。

    def __call__(self, env, start_response):
            """
            根据WSGI标准,web应用程序需要包含两个参数:
            @param env : 一个包含了请求内容的字典
            @param start_response : 开始处理来自客户端的请求
            """
            path = env["PATH_INFO"]
            if path in self.routes:
                # 路由映射函数已知
                status = '200 OK'
                headers = [('Content-Type', 'text/html;charset=UTF-8')]
                # print(env)
                # 对来自客户端的请求做封装处理
                request_method = env.get("REQUEST_METHOD", "")
                print("***"*28, request_method)
                if request_method == "POST":
                    content_length = int(env.get('CONTENT_LENGTH', 0))
                    form_data = parse_qs(env.get('wsgi.input', '').read(content_length))
                    self.request.add(key='method', value="POST")
                    # TODO 或许在这里处理一下来自用户请求的数据,比如escape防止脚本攻击
                    self.request.add(key='post_data', value=form_data)
                elif request_method == "GET":
                    self.request.add(key='method', value=request_method)
                    query_string = env.get('QUERY_STRING', '')
                    self.request.add(key='query_string', value=query_string)
                start_response(status, headers)
                return self.routes[path](self.request)
            else:
                # 处理函数不包含在路由控制器内
                status = '404 Not Found'
                headers = [('Content-Type', 'text/html;charset=UTF-8')]
                start_response(status, headers)
                return ["No handler match for `{}`".format(path).encode('utf8')]

    backend

    后台存在的意义就是路由映射以及监听客户端请求,并将与请求对应的处理函数进行转发处理。
    总的来说类似于一个控制器,或者中间件。用过Flask的童鞋可能会非常容易的理解下面代码的作用了。没用过的话也应该能见名之意。

    # coding: utf8
    """
    监听客户端请求,返回相应的执行结果。
    """
    import os
    from server import Application
    from executor import runcode
    # from jinja2 import Template
    
    app = Application(__name__)
    
    
    # 下面开始对于前台的请求做路由控制
    @app.route('/')
    def index(request):
        """
        可以适当的对首页做下简介。
        """
        print("handler方面:", request)
        # 也可以尝试使用模板
        with open('./templates/index.html', 'r', encoding="utf8") as f:
            html = f.read()
            f.close()
        yield html.encode('utf8')
    
    @app.route('/api/user')
    def user(request):
        print(request.params)
        if request.params.get('method', '') == "POST" or request.params.get('method', '')== "GET":
            data = request.params.get('post_data')
            print(data[b'code'][0].decode('utf8'))
            # yield "接口处理相关".encode('utf8')
            code = data[b'code'][0].decode('utf8')
            result = runcode(code)
            yield result
        else:
            yield "Nothing".encode('utf8')
    
    
    if __name__ == "__main__":
        app.run(host='127.0.0.1', port=8888)

    通过装饰器就可以实现非常方便的路由映射,结合server的分发处理,就可以实现针对不同的路径实现不同的功能了。

    exector

    临时代码执行这块稍微有点问题,经过测试,我发现使用subprocess.Popen()并不是一个很好的解决办法。具体表现在:

    临时文件清理工作不够及时,不够彻底。

    有待进一步改进。

    目前版本也只是够用。。。。。。

    # coding: utf8
    """
    接受Python脚本,执行相关代码,返回相应结果。
    """
    
    import subprocess
    import os
    
    
    def runcode(data):
        """
        运行前台传过来的Python代码
        """
        # 删除临时文件, 防止上次产生的结果产生影响。
        if os.path.exists('temp.py'):
            os.remove('temp.py')
        with open('temp.py', 'w', encoding='utf8', buffering=1) as f:
            f.write(data)
            f.close()
        # 开启管道,获取执行结果
        process = subprocess.Popen('python temp.py', stdout=subprocess.PIPE)
        data = process.stdout.read()
        del process
        return data
    

    前端

    前端我的思路就是利用ajax实现前后端的分离逻辑。让页面和数据处理分离开来,更高效的处理各自的事物。

    ajax

    为了验证方便性,我用原生的JavaScript和JQuery分别作了实现,发现还是JQuery好用啊,让我们可以更专注于事物的处理而不是纠结于控制结构上。(⊙﹏⊙)b

    function send() {
            // 先获取文本域内的代码值
            var sourcecode = $("#sourcecode").val();
            // var sourcecode = document.getElementById("sourcecode").value;
            // 借助ajax实现功能获取
            var xhr = new XMLHttpRequest();
            xhr.onreadystatechange = function () {
                if (xhr.readyState == 4) {
                    console.log(xhr.responseText)
                }
            }
            xhr.open('post', '/api/user')
            xhr.send({ 'code': sourcecode })
        }
    
        function send2(){
            // 更新聊天页面
            update_chat();
            // 请求代码执行结果
            $.ajax({
                url: '/api/user',
                type: "POST",
                dataType: "json",
                async: true,
                data: {'code': $("#sourcecode").val()},
                success: function(response){
                    console.log("Success.")
                    console.log(response)
                    // console.log(response.responseText);
                    // eval('var data = '+ response.responseText)
                    // result = response.responseText
                    update_robot(response.content);
                },
                error: function(msg){
                    console.log("Error.")
                    console.log(msg.responseText);
                    result = msg.responseText;
                    update_robot(result);
                }
            })
            // document.getElementById("sourcecode").value = "";
            // 更新滚动条,以便于自动上划。
            scroll_top();
        }

    页面更新

    这里页面更新的触发时机应该是每次点击完发送按钮之后,所以只需要在按钮的响应函数里面添加相应的逻辑即可。

    function update_chat(){
            console.log("Ready to append mywords.")
            // 先创建本人说话的内容节点
            var source = $("#sourcecode").val();
            // http://avatar.csdn.net/0/8/F/3_marksinoberg.jpg
            child_node = "<div class='mywords'><img src='http://avatar.csdn.net/0/8/F/3_marksinoberg.jpg'><span>"+source+"</span><br /><br /></div>"
            var mywords = $(child_node);
            $("#lefttop").append(mywords);
        }
    
    
        function update_robot(result){
            console.log('更新聊天机器人代码执行结果。')
            // 创建代码返回结果的节点
            child_node = "<br /><br /><div class='robot'><span>"+result+"</span><img src='http://avatar.csdn.net/0/B/4/1_yangwei19680827.jpg'></div>"
            var robot_words = $(child_node);
            $("#lefttop").append(robot_words);
        }
    
        // 页面自动上划
        function scroll_top(){
            var messagebox = document.getElementById("lefttop");
            messagebox.scrollTop = messagebox.scrollHeight-messagebox.style.height;
        }

    演示

    下面来看几个图片,聊表心意。

    简易“应答”模式

    简易应答模式

    “代理模式”处理外部请求

    代理模式处理外部请求

    后台日志

    后台日志监测


    总结

    已知问题:

    • make_server 本身的处理问题。
    • temp.py临时文件更新问题
    • 静态文件路径处理的不是很好(⊙﹏⊙)b

    完整代码可以到我的GitHub上进行download。

    https://github.com/guoruibiao/code-chatter

    展开全文
  • 使用python可以说是站巨人肩膀上编程,使得程序员更专注于业务及逻辑,而不是被人学烂的语言工具。但是团队合作时候,就会有一些多语言编程,然后集成的问题,例如我遇到的Java和Python。为了方便非Python程序员...

    Python是一门好用的脚本语言,底层基于C实现,快速且简单。使用python可以说是站在巨人肩膀上编程,使得程序员更专注于业务及逻辑,而不是被人学烂的语言工具。但是团队合作时候,就会有一些多语言编程,然后集成的问题,例如我遇到的Java和Python。为了方便非Python程序员能够使用写好的python程序,需要考虑两个方面:
    - 环境是否可迁移,在没有python环境的机器上如何运行。
    - Java如何实现与python的交互。


    环境迁移
    方案一
    (1) 安装python环境,写入path路径
    (2) 保证pip可以正常使用,cmd切换到路径下:c:/Python27/Scripts>pip
    (3) pip install -r requirement.txt
    site-packages里面放的是第三方包。包可以通过import 引入程序中。 因此,需要提前写好requirement.txt文件,包含一堆依赖

    方案二
    将python打包成exe,可以在无python环境的windows环境下运行python代码。有两个工具可供使用:
    Py2exe:
    python2.7 对应0.6.9版本的py2exe,需要另外创建setup.py,且不支持win64. 具体见:python打包程序py2exe实战
    PyInstaller:
    推荐使用,
    (1)首先安装:pip install pyinstaller
    (2)开始打包成exe

    • 命令提示符cd 到需要打包的文件的目录
    • 直接在命令提示符中输入pyinstaller -F 文件名.py 注意F要大些,呵呵就这么简单
    • 打包成功后会出现两个文件夹,其中一个就是所需要的exe文件;
      注:若是gui文件可以在输入pyinstaller -F -w文件名.py 其中w是小写,意思就是五命令行窗口,默认的是-c有命令行窗口,当然一般的文件也可以-w,这样命令行窗口就没有了。
      pyinstaller 的其他常用的参数
    • “- -icon=图标路径”
    • “-F 打包成一个exe文件”
    • “-w 使用窗口,无控制台”
    • “-c 使用控制台,无窗口”
    • “-D 创建一个目录,里面包含exe以及其他一些依赖性文件 还有一些可以通过pyinstaller -h 来查看参数”
      例如:
      C:\Users\Desktop\exe>pyinstaller -F c:/helloworld.py
      exe存放地址> pyinstaller -F 目标文件

    Java如何实现与python的交互。
    **解决:**文件读写。Java输出的数据,交给python读取并处理。python输出处理结果到文件,Java读取并进行后续工作。
    Java中运行python脚本的三种方式
    (1) 直接执行Python脚本代码
    引用 org.python包

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

    (2) 执行python .py文件

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

    (3)使用Runtime.getRuntime()执行脚本文件
    这种方式和.net下面调用cmd执行命令的方式类似。如果执行的python脚本有引用第三方包的,建议使用此种方式。使用上面两种方式会报错java ImportError: No module named arcpy。

    Process proc = Runtime.getRuntime().exec("python  D:\\demo.py");  
    proc.waitFor(); 
    

    使用第三种方法如何获取python返回值:
    process可以从python拿到流,然后重新在java里把这个流在java里初始化,就可以获取返回值,举个例子:

    /执行
        private void playRunTime() throws Exception {
            String cmd = "adb version";
            Process p = Runtime.getRuntime().exec(cmd);
            InputStream is = p.getInputStream();
            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String line;
            while ((line = reader.readLine()) != null) {
                tv_result.append(line + "\n");
            }
            p.waitFor();
            is.close();
            reader.close();
            p.destroy();
        }
    

    具体机制请看: https://blog.csdn.net/qq_26787115/article/details/52963013

    参考文献:
    Java运行Python脚本的几种方式
    第一次迁移一个 Python 项目
    python打包py2exe和pyinstaller

    Java调用Python

    展开全文
  • Lua C++交互机制

    千次阅读 2017-08-16 16:13:46
    一、Lua与C++的交互机制——Lua堆栈1)交互机制Lua和C++ 的交互机制的基础在于Lua提供了一个虚拟栈,C++ 和Lua之间的所有类型的...当C代码中要获取Lua的一个值的时候,只需要调用Lua API将指定值压入栈,C再获取栈顶
  • service方法的两个重要参数。 ServletRequest – 用接收用户的请求。它的作用是: 可获取请求头信息。 可设置请请求的字符编码。 可获得用户传递的参数。Post或get。 可获取远程(即访问者)的IP地址。 可获取输入...
  • Python 交互环境

    千次阅读 2018-07-09 16:48:46
    一、交互式环境和文件在安装配置环境之后打开cmd输入python回车,就进入到了Python的交互式环境,在交互式环境写入语句然后回车,语句将会直接被执行且不会被保存。使用交互式环境可以快速的验证你的代码是不是...
  • 上一篇文章给出了Android端的部分代码,这篇文章则完成了服务器端的相关工作,我选择php来对上传文件进行处理,毕竟php比较好上手。 准备工作 1.准备一个服务器,可以选择购买云服务器或者搭建本地,我选择的是...
  • 定制Python的交互提示符

    千次阅读 2009-01-13 15:57:00
    Python启动后,先寻找PYTHONSTARTUP环境变量,然后执行此文件中变量指定的执行代码。一些Linux发布包提供了缺省的启动脚本,一般存放在其home目录,名为.pythonstartup。“Tab完成”和“命令历史”这两个功能增强了...
  • 接着上一篇的介绍(地址,戳这里:http://blog.csdn.net/joyhen/article/details/44096665),试着用edge做一个...建一个目录,用于存放demo的,比如我的,F盘里面建了一个node文件夹 F:\node 先写一个基本的node.j
  • 登录和注册的源代码 查询操作的实现 用一个简单的例子说一下 android的activity-xml文件上只需要有一个按钮就可以了,监听这个按钮! 接下来是Mainactivity代码 public class MainActivity extends ...
  • VB与数据库的几种交互

    千次阅读 2013-06-14 10:10:00
    首先需要vb部件添加ADO控件——属性   此我们可以看到,有三种方式可以实现VB与数据库的连接。  1.data link文件连接:数据连接文件。 UDL文件存储数据库连接的方式和使用“ODBC”数据源名称(DSN)非常...
  • asp.net后台c#数组与前台js数组交互

    万次阅读 2014-02-26 21:47:26
    在上一篇《asp.netjavascript与后台c#交互实现了前端脚本javascript调用后台的数据库的数据。但新的问题又出现了,由于地图上有多个点,所以存放google maps的longitude和latitude有多个值,这就需要利用数组...
  • 文件系统--procfs进程目录的问题

    千次阅读 2010-08-18 22:47:00
    它是一个只有你看的时候才会存在的文件系统,它们一样都是用来进行内核-用户态通信的,它们和netlink或者syscall的区别在于它们是文件的方式,大量的文件系统接口都可以使用,免去了编写c代码或者其它代码的工作量...
  • android与js之间的交互

    千次阅读 2017-10-18 09:17:03
    Android:你要的WebView与 JS 交互方式 都这里了 今天我将全面介绍Android通过WebView与JS交互的全面方式 阅读本文前请先阅读:Android开发:最全面、最易懂的Webview详解 1. 交互方式总结 ...
  • spring boot 与 iview 前后端分离架构之前后端交互的实现(六)axios的跨域访问工具的...基于第五章的工程,bg-admin-web的src目录底下创建一个lib目录,该目录主要用于存放我们的axios的封装的实现,以下是axi...
  • 用JSP实现动态交互

    千次阅读 2018-04-24 16:59:35
    1、HTML嵌入Java脚本代码2、由应用服务器的JSP引擎来编译和执行嵌入的Java脚本代码3、然后将生成的整个页面信息返回给客户端 二、为什么需要基于B/S技术的动态网页?使用动态网页,可以动态输出网页内容、同...
  • javaWeb前后台交互(二)

    千次阅读 多人点赞 2018-07-06 21:22:29
    接上一篇javaWeb前后台交互。链接:https://blog.csdn.net/blackplus28/article/details/80603863 一、MVC思想 责任分离思想. M:Model,数据模型对象.(JavaBean) V:View,视图界面.(JSP,Panel,Window) C:...
  • Ajax实现前后端交互

    千次阅读 2020-03-22 21:35:38
    这里的前后端交互主要以,前段ajax技术发送.php文件地址和.php文件建立连接;php接收前端发送的数据放在对应变量,然后以mysql地址连接mysql做相应操作,接着把mysql改变后的数据返给ajax;ajax接收数据并通过js...
  • 存放本地html文件:放在app/src/main/assets目录下,一般来说android studio项目下是没有assets文件夹的,所以需要app/src/main下新建一个文件夹,取名assets.如图:   访问本地的html文件,功能很简单,代码...
  • Unity3D导出WebGL与ASP.NET交互

    千次阅读 2017-07-27 18:00:03
    当我们通过Unity发布WebGL时,通常会希望我们的Unity3D程序可以和网页...Build文件夹包含了WebGL所有打包的内容,其中最重要的部分是UnityLoader.js和*.json这两个文件。 详细的介绍可以从官方的Interacting ...
  • Zynq-linux PL与PS通过DMA数据交互

    千次阅读 多人点赞 2019-10-04 10:39:55
    米尔科技的z-turn板上,采用AXI DMA 实现zynq的PS与PL数据交互。 二、分析 ①PS数据传PL 驱动的测试程序给出一堆数据,通过DMA传输到AXI4-Stream Data FIFO ,PL端从DATA FIFO把数据读出来。 ②PL数据传...
  • AndroidApk加固代码实现

    千次阅读 热门讨论 2019-06-13 15:40:28
    也开始创建了一个空的demo进行,然后项目添加一个代理module(解密,和系统源码交互功能)和tools工具加密Java library 的module ,这里开始接着把整个过程用代码操作一遍,希望对大家有所帮助。 代码用到的...
  • 注:本分类下文章大多整理自《深入分析linux内核源代码》一书,另有参考其他一些资料如《linux内核完全剖析》、《linux c 编程一站式学习》等,只是为了更好地理清系统编程和网络编程的一些概念性问题,并没有深入...
  • 前端小白,做了一个非常简单的登陆页面,只有一个功能,将用户名密码性别... 3 一个普通的登陆界面类网站项目的结构是什么,我需要建立哪些jsp页 面,哪些java类文件,分别存放什么,哪些页面会与数据库交互。**
  • 公司有一个需求需要将前端传过来的10张照片,后端接收过来进行处理以后压缩成一个压缩包通过网络流传输出去。之前没有接触过用Java压缩文件的,所以就...未优化压缩文件代码如下: private static String ZI...
  • c语言文件操作

    千次阅读 多人点赞 2018-12-21 09:26:46
    文件操作读写 1 文件处理原理及基本概念 C语言的文件处理功能,大体上分为...当使用包含头文件stdio.h的标准I/O函数时,系统会自动设置缓冲区,并通过数据流来读写文件。当进行文件读取时,不会直接对磁盘进...
  • 交互式shell和非交互式shell、登录…

    千次阅读 2014-11-25 18:11:31
    交互式shell和非交互式shell、登录shell和非登录shell的区别。 首先,这是两个不同的维度来划分的,一个是是否交互式,另一个是是否登录。 交互式shell和非交互式shell 交互式模式就是shell等待你的输入,并且...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 160,657
精华内容 64,262
关键字:

交互代码存放在什么文件中