简单的问题:如何将任意args列表传递给python可调用?
假设我想从命令行调用一个函数,如下所示:
my_script.py foo hello world
Run Code Online (Sandbox Code Playgroud)
使用以下脚本:
import myfuncs
f = getattr(myfuncs, sys.args[1])
if f and callable(f):
# This is the bit I don't know. I effectively want f(sys.args[2:])
Run Code Online (Sandbox Code Playgroud)
我确信有办法做到这一点,但我必须忽略它.
我目前正在为Maya编写一个基于Python的工具.我正在使用一系列代码,我已经在其他工具的其他部分中使用了这些代码,并且出于某种原因它拒绝在这一轮工作.我看不出有什么理由不是.
def generateClothSkeleton(cloth):
print "Generating Cloth Skeleton"
objects = cmds.textScrollList("clothList", ai=True, q=True)
for x in range(0, len(objects)):
numVerts = cmds.polyEvaluate((objects[x]), v=True)
vertPosList = []
for y in xrange(1, numVerts):
object = objects[x]
xformString = object + ".vtx[" + str(y) + "]"
vertPos = cmds.xform(xformString, t=True, ws=True, a=True, q=True)
vertPosList.extend([vertPos])
...
Run Code Online (Sandbox Code Playgroud)
运行时,Python会在object = objects [x]行上返回错误:'list'对象不可调用.这很奇怪,考虑到没有打电话......
是什么导致了这个令人愤怒的问题?
编辑:值得注意的是,如果我运行打印对象[x],它会按预期返回对象的名称...
如何使以下Java代码工作:
public class Worker implements Callable<myObject>{
@Override
public ArrayList<myObject> call() throws Exception {
ArrayList<myObject> lst_MyObjects= new ArrayList<myObject>();
return lst_MyObjects;
}
}
Run Code Online (Sandbox Code Playgroud)
错误:返回类型与Callable.call()不兼容
我只想返回一个特定类型的容器(Vector<>/ ArrayList<>等)
我有一个包含一些lambda元素的列表:
l=['A',lambda x:x*2,lambda x:x*3]
Run Code Online (Sandbox Code Playgroud)
在执行lambda之后如何将此列表附加到另一个(如下所示 - 显然这个不起作用):
m=list(k=k(3) if isinstance(k,types.FunctionType) else k for k in l)
Run Code Online (Sandbox Code Playgroud)
预期的是:
m=['A',6,9]
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我正在使用ExecutorService来调用一个服务,该服务基本上连接到一个应用程序(本地或通过 SSH 远程),并允许向其发送命令并获取其输出。
因此,Thread由 所创建的ExecutorService正在等待用户输入,然后通过 call 方法的实现将该输入作为任务处理,该方法返回输出,如下所示:
@Override
public String call() throws Exception {
write(command);
return readResult();
}
Run Code Online (Sandbox Code Playgroud)
当给定时间内没有调用任何任务时,我想停止Thread(关闭ExecutorService),但我找不到如何执行此操作...Future.get或者ExecutorService.invoke[All|Any]可以处理超时,但仅涉及它调用的任务。
关于我如何能够做到这一点有什么想法吗?
我正在尝试创建一种方法,允许我使用我认为称为lambdas的方法,在一系列连接上执行方法.
这是我在经过一些研究后得出的代码,但它不起作用:
performGlobalAction(()->{
// doSomething();
});
Run Code Online (Sandbox Code Playgroud)
你还需要看到我假设的方法:
private <T> void performGlobalAction(Callable<T> action) {
for(int i = 0; i < connectionList.size(); i++) {
connectionList.get(i).performAction(action);
}
}
Run Code Online (Sandbox Code Playgroud)
这提供了以下错误:
The method performAction(Callable<T>) in the type Connection is not
applicable for the arguments (() -> {})
Run Code Online (Sandbox Code Playgroud)
这种方法的目标是允许自己构建一个"在旅途中"的方法,而不会为它创建一个空白.
这可能吗?好像我之前已经使用了大量的语句.看起来这实际上就是lambdas语句的工作原理.
我有一个函数,使一些服务调用数据库,我不想改变.但是如果有多个请求需要运行此函数,我想在线程池中运行它们.所以,我试图找出如何在Callable类中包装此函数.这是函数的签名:
void invokeCommand(string table, int ctype)
函数invokeCommand不返回任何值,但可以抛出异常.我想使用以下构造不是一个选项,因为我无法将参数和invokeCommand函数传递给它.
Callable<Void> myCommand = new Callable<Void>() {
public Void call() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
我了解到另一种方法是定义一个命名类而不是匿名类,并通过构造函数传递参数(string,int).有没有办法我也可以传递函数invokeCommand?推荐的方法是什么?提前致谢.
我尝试在控制器中使用返回类型 Callable 以便在处理请求时释放 servlet 线程,但是当在开发环境中部署 Spring Boot 应用程序时出现以下错误:
org.springframework.web.util.NestedServletException:请求处理失败;嵌套异常是 java.lang.IllegalStateException:必须在 servlet 上以及异步请求处理中涉及的所有过滤器上启用异步支持。这是使用 Servlet API 在 Java 代码中或通过将“true”添加到 web.xml 中的 servlet 和过滤器声明来完成的。
注意:我已经阅读了几篇有关此错误的文章,但没有一个解决了我的问题。
我遇到的特殊行为是,本地一切都按预期工作:servlet 线程被释放,请求在带外处理,最终返回给客户端所需的响应。
但是,当应用程序部署在前面提到的开发环境中时,事情就无法按预期工作。
在本地测试时,我检查了 servlet/filters 是否支持异步;在调试时,我只需在给定的过滤器中放置一个断点ApplicationFilterChain,然后检查整个链。在那里,我可以检查 servlet 属性(其中我看到 asyncSupported 设置为 true)以及链中包含的每个过滤器(我一一检查了它们;所有它们的 asyncSupported 设置为 true)。
我还有一个自定义JwtAuthenticationFilter,它是AbstractAuthenticationProcessingFilter身份验证阶段的一部分,因此我还在此类过滤器中放置了一个断点并检查链。在那里我看到了originalChain(ApplicationFilterChain之前评论过的)和“additionalFilters”集合,其中出现了我的JwtAuthenticationFilter以及spring安全过滤器。但它们都没有 asyncSupported 属性,所以我假设它们不是开发服务器抛出的错误的一部分。请注意,正如我在本地提到的,一切正常;该错误仅在部署到开发服务器时出现。
控制器方法:
@GetMapping(path = "/export")
public Callable<ResponseEntity> exportData() throws IOException {
return new CustomContextAwareCallable(() -> handleResponse());
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:即使 ApplicationFilterChain 上的每个过滤器以及 servlet 都将 asyncSupported 设置为 true,为什么我在部署后会从服务器收到上面显示的错误?
该应用程序没有作为 .WAR 部署在服务器上,它只是使用嵌入式 tomcat(与我在本地执行的操作相同)。
更新:另一个区别是,在开发环境中客户端请求通过 nginx 代理传递(只是想知道是否由于某种原因请求属性 …
我有以下python代码:
import networkx as nx
def cost(i, j, d, value1, value2):
# some operation involving all these values
return cost
# graph is a networkx graph
# src, dst are integers
# cost is a callable that is passed 3 values automatically i.e. src, dst and d
# d is a dictionary of edge weights
path = nx.dijkstra_path(graph, src, dst, weight=cost)
Run Code Online (Sandbox Code Playgroud)
现在我想通过两个值value1,并value2给cost功能。
该networkx文件表示,weight可以接受恰好3参数的调用。但我需要value1和value2进行计算。如何才能做到这一点?
编辑 使用 functools …
我试图实现一个通用的callable来委派不同类型的帐户的修改.代码如下所示:
import java.util.concurrent.Callable;
class Task<T extends BaseAccount> extends Callable<T extends BaseAccount> {
private final T t;
public Task(T t) {
this.t = t;
}
@Override
public T call() throws Exception {
t.increment();
return t;
}
}
Run Code Online (Sandbox Code Playgroud)
BaseAccount只是一个抽象类,如下所示:
abstract class BaseAccount {
abstract public void increment();
}
Run Code Online (Sandbox Code Playgroud)
但显然我没有到达那里,因为我看到很多与泛型有关的编译错误.希望通过这一点获得帮助.