小编Dou*_*oug的帖子

你如何在IronPython中使用标准库?

我将这个问题加上前缀:不,设置IRONPYTHONPATH不是答案.

无论如何...

我计划使用IronPython作为项目的Powershell的替代品,但在我开始之前我一直都很难过.

我尝试做的第一件事是使用os.path,结果是:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named os
Run Code Online (Sandbox Code Playgroud)

搞砸了我终于发现我可以通过手动添加到路径来使用标准库:

import sys
sys.path.append(r"C:\Program Files\IronPython 2.7\Lib")
import os
Run Code Online (Sandbox Code Playgroud)

然而,这是一个愚蠢的想法.在我的脚本中硬编码python库的路径是一种100%保证的方式,使它们在某些时候不起作用.

当我尝试在Windows 7机器上使用脚本并且路径略有不同时('Program Files(x86)'),我几乎立即发现了这一点.

所以,这里有几个问题:

1)为什么使用标准库这么难?至少我会想到VS中的交互式提示和基本的ipy.exe会有这个.

2)无论我使用何种系统,如何确定安装铁python的目录?(IronPython安装程序设置var也许?)

这里只是一个注释; 是的,我看过其他一些帖子说"设置你的IRONPYTHONPATH".这无益.如果我有一台空机,这意味着我必须:

1)安装IronPython

2)运行一些疯狂的PowerShell脚本来搜索标准库的安装位置,并为其设置一个全局IRONPYTHONPATH变量.

3)运行python脚本

我正在寻找更好的方法.

-

编辑:

事实上,我使用它来做类似于powershell的事情基本上是无关紧要的,但我正在尝试实现类似的东西:

import clr
from System.Management.Automation import RunspaceInvoke
import os

scriptRoot = os.getcwd()
runSpace = RunspaceInvoke()
cmdPath64 = os.join(scriptRoot, "..\java\...")
cmdPath32 = os.join(scriptRoot, "..\java\...")
proc = runSpace.Invoke("Get-WmiObject Win32_Processor ... ")
if proc.AddressWidth == 32: …
Run Code Online (Sandbox Code Playgroud)

c# python ironpython

11
推荐指数
1
解决办法
6401
查看次数

你可以从生锈的调用库中运行生锈代码吗?

我已经查看了锈外部函数接口,并成功(并且愉快地)可以从我的锈色代码中调用ac库.

但是,我似乎无法在c代码范围内找到有关如何注册回调以调用生锈代码的任何细节.

这甚至可能吗?

作为"为什么你会这样做?"的理由; 具体来说,我正在考虑在生锈应用程序中嵌入lua或python,并为在嵌入式运行时上运行的脚本公开脚本api.

调用这些将是以下内容:

  • 主要施工负荷
  • 应用程序使用ffi初始化脚本运行时
  • 应用程序将本地生锈函数绑定到C-callbacks
  • 应用程序调用ffi将C回调绑定到脚本层
  • 应用程序运行〜
  • 定期ffi用于触发脚本运行时执行字节码块
  • 脚本代码执行各种简单的逻辑并调用绑定句柄
  • 绑定句柄调用c代码
  • 绑定的c代码调用本地生锈代码

所有这些步骤除了粗体之外我已经设法工作,并且我使用调度程序完成了一些简单的工作,C调用将"运行我"命令转储到队列中,当控制返回到生锈范围,应用程序查询队列并运行其中的命令...

...但是从脚本方面来说有点尴尬,因为它意味着多个嵌套的异步回调,而脚本层的重点是简化需要进入脚本层的代码.

rust

11
推荐指数
1
解决办法
1096
查看次数

你如何使用打字稿编写节点模块?

那么,另一个问题(如何使用typescript 导入模块)的一般答案是:

1)创建一个blah.d.ts定义文件.

2)使用:

/// <reference path="./defs/foo/foo.d.ts"/>
import foo = require("foo");
Run Code Online (Sandbox Code Playgroud)

关键的是,你需要 node_modules中的某个地方加载文件foo.d.ts和foo.js; 并且 NAME foo必须与两者完全匹配.现在...

我想回答的问题是如何编写一个可以用这种方式导入的打字稿模块?

可以说我有一个这样的模块:

- xq/
- xq/defs/Q.d.ts
- xq/index.ts
- xq/base.ts
- xq/thing.ts
Run Code Online (Sandbox Code Playgroud)

我想从base.ts导出模块'xq'和'Base'类,从thing.ts导出'Thing'.

如果这是javascript中的节点模块,我的index.ts看起来像:

var base = require('./base');
var thing = require('./thing');
module.exports = {
  Base: base.Base,
  Thing: thing.Thing
};
Run Code Online (Sandbox Code Playgroud)

让我们尝试使用类似的打字稿文件:

import base = require('./base');
export module xq {
    export var base = base.Base;
}
Run Code Online (Sandbox Code Playgroud)

调用它:

tsc base.ts index.ts things.ts ... --sourcemap --declaration --target ES3 
                                   --module commonjs --outDir …
Run Code Online (Sandbox Code Playgroud)

commonjs node.js typescript

11
推荐指数
1
解决办法
4916
查看次数

如何在生锈中实现通用特征的特定类型?

我最初假设您可以这样做,因为文档(http://doc.rust-lang.org/rust.html#implementations)建议您可以:

trait Bar<T> {
  fn ex(&self) -> T;
}

struct Foo {
  y:f64
}

impl Bar<int> for Foo {
  fn ex(&self) -> int {
    return self.y.floor() as int;
  }
}

impl Bar<uint> for Foo {
  fn ex(&self) -> uint {
    if (self.y < 0.0) {
      return 0u;
    }
    return self.y.floor() as uint;
  }
}
Run Code Online (Sandbox Code Playgroud)

......但这似乎不起作用.我得到的错误如下:

error: multiple applicable methods in scope
error: expected Bar<uint>, but found Bar<int> (expected uint but found int)
error: expected Bar<int>, but found Bar<uint> …
Run Code Online (Sandbox Code Playgroud)

rust

11
推荐指数
1
解决办法
1万
查看次数

你如何在Rust中进行进程间通信(IPC)?

是否有标准库的一部分?

我一直在挖掘,但我看不到任何立即明显的实现它,或任何东西Process可以让你这样做?

我错过了吗?或者我是否必须为此功能执行一些C-wrapper工作?

(如果是这样,序列化一个对象Send并将其传递给另一个进程是否"安全" ,然后在那里反序列化?那是什么Send意思?)

ipc rust

11
推荐指数
1
解决办法
5709
查看次数

您如何从流程中输出流量?

一般来说,我相信我理解这样做的一种方式:

  • 创建一个 Command
  • 使用Stdio::piped()创建一个新的对输出流
  • 配置command.stdout(),和command.stderr()
  • 产生这个过程
  • 创建一个新线程并将stderr和stdout传递给它< - ???
  • 在远程线程中,不断轮询输入并将其写入输出流.
  • 在主线程中,等待进程完成.

听起来不错吗?

我的两个实际问题:

  1. 是否有一种更简单的方法,不涉及每个进程的"读取线程"?

  2. 如果没有更简单的方法,Read::read()需要&mut self; 你如何将它传递到远程线程?

请提供有关如何实际流式传输输出的具体示例,而不仅仅是有关如何执行此操作的通用建议...

更具体地说,这是使用的默认示例spawn:

use std::process::Command;

let mut child = Command::new("/bin/cat")
                        .arg("file.txt")
                        .spawn()
                        .expect("failed to execute child");

let ecode = child.wait()
                 .expect("failed to wait on child");

assert!(ecode.success());
Run Code Online (Sandbox Code Playgroud)

如何更改上面的示例以将child的输出流式传输到控制台,而不是仅仅等待退出代码?

rust

11
推荐指数
2
解决办法
1849
查看次数

&T字面上是Slice的别名吗?

&[T] 令我困惑.

我天真地认为像&T,&[T]是一个指针,这就是说,一个数字指针地址.

但是,我已经看到了一些像这样的代码,我看到工作正常(为了演示目的而简化;但是你在许多'as_slice()'实现中看到这样的代码)我感到非常惊讶:

extern crate core;
extern crate collections;

use self::collections::str::raw::from_utf8;
use self::core::raw::Slice;
use std::mem::transmute;

fn main() {
  let val = "Hello World";
  {
    let value:&str;
    {
      let bytes = val.as_bytes();
      let mut slice = Slice { data: &bytes[0] as *const u8, len: bytes.len() };
      unsafe {
        let array:&[u8] = transmute(slice);
        value = from_utf8(array);
      }
      // slice.len = 0;
    }
    println!("{}", value);
  }
}
Run Code Online (Sandbox Code Playgroud)

所以.

我最初认为这是无效的代码.

也就是说,在Slice块作用域内创建的实例将返回到块作用域之外(通过转换),尽管代码运行,但println!实际上是通过不安全指针访问不再有效的数据.坏!

......但似乎并非如此.

考虑评论该行 …

rust

10
推荐指数
1
解决办法
989
查看次数

如何在OSX上的构建(不安装)的cmake中为可执行文件添加rpath?

因此,如果您已经有二进制文件,可以使用'install_name_tool'在OSX上添加一个rpath,如下所示:

install_name_tool -add_rpath @executable_path/blah
Run Code Online (Sandbox Code Playgroud)

当您构建应用程序包时,xcode会自动执行此操作.

我知道在cmake中你可以使用它来设置共享库的install_name:

set_target_properties(nshared PROPERTIES BUILD_WITH_INSTALL_RPATH 1 INSTALL_NAME_DIR "@rpath")
Run Code Online (Sandbox Code Playgroud)

我的问题是,为二进制文件添加rpath相当于什么呢?

(对于'为什么你会这样做?',在你的应用程序/文件夹中的任何应用程序上查看otool -l,你会看到很多应用程序的条目如下:

Load command 15
          cmd LC_RPATH
      cmdsize 36
         path @executable_path/../../Frameworks/
Run Code Online (Sandbox Code Playgroud)

这是标准做法.我只是想在cmake中做到这一点)

macos cmake

9
推荐指数
1
解决办法
8120
查看次数

如何在多个包中使用通用测试套件?

当我编写接口时,通常可以方便地在与接口相同的包中定义我的测试,然后定义实现接口集的多个包,例如.

package/
package/impl/x <-- Implementation X
package/impl/y <-- Implementation Y
Run Code Online (Sandbox Code Playgroud)

有没有一种简单的方法可以在子包中运行相同的测试套件(在本例中,位于package/*_ test.go中)?

我到目前为止提出的最佳解决方案是添加一个测试包:

package/tests/
Run Code Online (Sandbox Code Playgroud)

它实现了测试套件,并在每个实现中进行测试以运行测试,但这有两个缺点:

1)包/测试中的测试不在_test.go文件中,最终成为实际库的一部分,由godoc等记录.

2)包/测试中的测试由自定义测试运行器运行,该测试运行器必须基本上复制'go test'的所有功能以扫描go测试并运行它们.

看起来像一个非常俗气的解决方案.

有没有更好的方法呢?

go

9
推荐指数
1
解决办法
1784
查看次数

你如何避免与香草网络组件请求地狱?

您如何/可以避免每个Web组件发出服务器请求?

背景

所以,有了javascript,很多人现在正在使用所谓的AMD模块加载模型,其中所有模块都是单独的javascript文件,并根据需要包含在内.例如.

- main.js
-- module1/mod1.js
-- module2/mod2.js
-- module3/mod3.js
Run Code Online (Sandbox Code Playgroud)

这导致对服务器的多个请求,每个javascript文件一个.这被认为对应用程序性能有害,特别是在移动设备中,随着javascript模块数量的增加.

因此,诸如require.js之类的工具提供了一个编译器,它将自动跟踪依赖关系并生成包含其中所有模块的单个javascript文件; 有效地减少了单个文件的请求开销(通常是app-min.js).

Web组件

每个Web组件都位于外部文件岛中,并使用标头中的链接标记导入:

<link rel="import" href="elements/image-gallery.html">
<link rel="import" href="elements/social-media.html">
<link rel="import" href="elements/pinmap.html">
<link rel="import" href="elements/nav-menu.html">
Run Code Online (Sandbox Code Playgroud)

如果你正在使用聚合物,你可以使用硫化工具来组合聚合物组分(http://www.polymer-project.org/articles/concatenating-web-components.html),但这是因为(据我所知) polymer是一个javascript框架,可以从"polymer-element"标签动态加载Web组件.

使用不依赖于x-tag或聚合物等框架工作的"vanilla"Web组件是否有相同的方法?

web-component

9
推荐指数
1
解决办法
1372
查看次数

标签 统计

rust ×5

c# ×1

cmake ×1

commonjs ×1

go ×1

ipc ×1

ironpython ×1

macos ×1

node.js ×1

python ×1

typescript ×1

web-component ×1