我对Python一般都很陌生,但我在Python 2.6/wxPython 2.8中创建了一个应用程序,当我通过Python运行时它非常有效.但我想更进一步,并能够将其部署为Windows可执行文件,所以我一直在尝试py2exe.但是我无法让它发挥作用.它总是会编译一个exe,但是当我真的尝试运行它时会发出一些神秘的错误消息.起初他们是简单的消息,说它找不到某些DLL,但即使给它所需的所有DLL,它现在返回:
The application failed to initialize properly (0xc0000142).
Click OK to terminate the application.
Run Code Online (Sandbox Code Playgroud)
所以我打破了局面,只是用wxPython制作了一个非常非常简单的应用程序,看看它是否有用,或者我的原始应用程序的一些更复杂的功能是否会妨碍.但即便是我的简单测试也返回了相同的错误.这是简单测试脚本的代码:
import wx
class MainWindow(wx.Frame):
def __init__(self, parent, id, title):
wx.Frame.__init__(self, parent, wx.ID_ANY, title, style=wx.DEFAULT_FRAME_STYLE ^ wx.MAXIMIZE_BOX)
panel = wx.Panel(self, -1, style = wx.TAB_TRAVERSAL | wx.CLIP_CHILDREN | wx.FULL_REPAINT_ON_RESIZE)
main_sizer = wx.BoxSizer(wx.VERTICAL)
testtxt = wx.StaticText(panel, -1, label='This is a test!')
main_sizer.Add(testtxt, 0, wx.ALIGN_CENTER)
panel.SetSizerAndFit(main_sizer)
self.Show(1)
return
app = wx.PySimpleApp()
frame = MainWindow(None, -1, 'Test App')
app.MainLoop()
Run Code Online (Sandbox Code Playgroud)
这是我使用的py2exe安装脚本:
#!/usr/bin/python
from distutils.core import setup
import py2exe
manifest …
Run Code Online (Sandbox Code Playgroud) 我将一个Web服务部署到运行Docker Multi-Container堆栈的Elastic Beanstalk环境中。我已在该环境上启用了到CloudWatch的日志流,因此Cloudwatch中显示了大约五个不同的日志组,因此,当我从Beanstalk中单击“请求日志”时,它将加载一个网页,向我显示所有日志文件,一个接一个。我注意到该网页上的某些日志在CloudWatch中没有显示为日志组,而这些是我真正关心的日志。我的问题是如何使它们显示为CloudWatch Log Groups?
特别地,Elastic Beanstalk自动为我创建的五个日志组是:
当我查看“请求日志”时生成的文件时,那五个确实存在。但是这些其他日志文件也表示为:
我真正感兴趣的是最后一个,以stdouterr.log结尾的那个。那是我的容器化应用程序将所有日志消息写入的地方。我想看到的是CloudWatch中的一个日志组,它对应于该stdouterr.log文件。据我所知,日志文件名中的12位ID是安装在主机上的Docker映像的ID,并且每次重新启动服务器时都会更改。所以我想我可能需要在Dockerrun.aws.json配置中挂载一个卷或类似的卷?此外,我猜想我是否需要手动将日志组添加到CloudWatch?如何显示此文件?
logging amazon-web-services amazon-cloudwatch docker amazon-elastic-beanstalk
我会承认我对Python很新,我真的不知道我在做什么.最近我使用Python 2.6.2和wxPython 2.8创建了一个非常小的Windows应用程序.而且效果很好; 我对它的正常工作表现非常满意.通常我的意思是当我直接通过Python解释器调用它时,如下所示:
> python myapp.py
Run Code Online (Sandbox Code Playgroud)
但是,我想更进一步,实际上将其编译成一个独立的可执行文件.所以我按照wxPython wiki中的这些指令使用了py2exe.起初它在命令行中给了我错误,说MSVCR90.dll丢失了.然后我将MSVCR90.dll复制到我的Python\DLLs文件夹中.这首先看起来像修复它,因为它成功地完成了它需要做的事情.它确实完成了一个快速警告,即程序依赖于某些DLL文件,我可能需要也可能不需要分发它们.
所以我导航到py2exe创建的dist文件夹并尝试运行我的可执行文件.但试图打开它只会弹出一个错误对话框,说:
This application failed to start because MSVCR90.dll was not found.
Re-installing the application may fix this problem.
Run Code Online (Sandbox Code Playgroud)
所以我继续将MSVCR90.dll再次复制到这个dist文件夹中.但那并没有成功.然后我将其复制到WINDOWS\system32目录中.那也没做到.我需要做些什么来使这个东西工作?
我将尽可能具体和冗长,并包括我正在使用的一些代码.我已经进行了搜索,发现了这个问题,看似相似; 但是作者使用的是ActionScript 2而不是3,而我似乎无法有效地应用任何给出我自己情况的答案.
我试图通过Flash/ActionScript 3模拟(以有限的方式)JavaScript的XMLHttpRequest对象的行为,以克服相同的域限制.但我发现ActionScript在这方面有其自身的局限性.我承认我可能会弄错,但据我所知,理论上仍然可以使用ActionScript进行这种跨域脚本编写,只要你获得所有权限.那就是我遇到麻烦的地方.
首先,我为一个名为AjaxRequest的类借用了一些开源代码,我将其保存为/ajax/AjaxRequest.as
.然后我创建了一个名为/jsajax.fla
导出到最终SWF文件的Flash文件/jsajax.swf
.现在,这是包含Flash文件的第一个也是唯一一个框架的ActionScript代码:
import ajax.AjaxRequest;
Security.allowDomain("domainone.com");
Security.allowDomain("domaintwo.com");
function jsAjax(stringURL:String, stringMethod:String, stringData:String):void
{
var xhr:AjaxRequest = new AjaxRequest(stringURL);
xhr.contentType = "application/x-www-form-urlencoded";
xhr.dataFormat = URLLoaderDataFormat.TEXT;
if ( stringMethod.toUpperCase() == "POST" ) {
xhr.method = URLRequestMethod.POST;
} else {
xhr.method = URLRequestMethod.GET;
}
xhr.addEventListener("complete", jsAjaxResponse);
xhr.send(stringData);
return;
}
function jsAjaxResponse(evt:Event):void
{
ExternalInterface.call("jsAjaxResponse", evt.currentTarget.data.toString());
return;
}
ExternalInterface.addCallback("jsAjax", jsAjax);
ExternalInterface.call("jsAjaxReady");
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.我觉得Security.allowDomain
不需要这些调用中的一个或多个,但他们试图解决这个问题是我的(不成功)尝试.
在我的JavaScript,我已经得到了定义了三个功能:jsAjax
,jsAjaxResponse
,和jsAjaxReady
.最后一个是一个非常基本的函数,用于指示Flash对象成功加载(仅在加载时立即调用一次),而另外两个用于发送和接收数据.如您所见,它们具有相应的ActionScript对应物.
最后,我创建了一个简单的HTML页面/test.html …
我有多个图像,我想将它们分别加载到<canvas>
不同时间点的单个元素中,然后使用CamanJS对它们进行操作.我可以让第一张图像看起来像这样:
Caman('#canvas-element', '/images/one.jpg');
Run Code Online (Sandbox Code Playgroud)
但是当我随后尝试使用以下代码更新相同的元素时,它不起作用.
Caman('#canvas-element', '/images/two.jpg');
Run Code Online (Sandbox Code Playgroud)
有没有办法重置/清除/刷新画布并将新的图像数据加载到其中,或者我真的需要为<canvas>
我想要加载的每个图像创建单独的元素吗?我更喜欢单个因素,因为我不想吃掉所有的记忆.
注意:以下示例中的唯一区别是ORDER BY子句.
好代码:
$sql = 'SELECT [date], ? AS [name]
FROM [transactions]
WHERE [category_id] = 10
GROUP BY [date]
ORDER BY [date] ASC';
$stmt = $db->prepare($sql);
$stmt->bindValue(1, 'Test', PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
//returns rows in $data
Run Code Online (Sandbox Code Playgroud)
不好的代码:
$sql = 'SELECT [date], ? AS [name]
FROM [transactions]
WHERE [category_id] = 10
GROUP BY [date]
ORDER BY [date] ASC, [name] ASC';
$stmt = $db->prepare($sql);
$stmt->bindValue(1, 'Test', PDO::PARAM_STR);
$stmt->execute();
$data = $stmt->fetchAll();
//returns an empty array
Run Code Online (Sandbox Code Playgroud)
为什么我的第二段代码不起作用?如果我直接运行此查询的任一版本(在SQL Management Studio中),它可以以任何方式工作.如果我摆脱PHP中的问号并将值硬编码到查询中(而不是绑定它),那也是有效的!这里发生了什么? …
我有一个简单的WPF应用程序.在正常使用下,App.xaml将启动MainWindow.xaml.但我想设置它,以便如果使用特殊的命令行参数调用它,它将作为控制台应用程序.
所以这里大概是我的App.xaml.cs文件的样子:
using System;
namespace MyProject
{
public partial class App : Application
{
public void App_OnStartup(object sender, StartupEventArgs e)
{
if (e.Args.Length == 1 && e.Args[0].Equals("/console"))
{
Console.WriteLine("this is a test");
Environment.Exit(0);
}
else
{
var mainWindow = new MainWindow();
mainWindow.Show();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
我希望当我从命令行运行时MyProject.exe /console
,它会打印字符串"这是一个测试".但是现在它没有打印任何东西.我怎样才能让它发挥作用?
我在通过Microsoft ClickOnce部署的.NET Framework 4.5上运行了一个C#应用程序.我还在使用一个名为DComPerm.exe的Microsoft SDK中的小实用程序,这是一个C++应用程序,我必须单独编译.我的主应用程序用于Process.Start()
访问此可执行文件.
当我第一次尝试在客户端计算机上运行它时,我收到一条错误消息,指出当应用程序尝试调用DComPerm.exe时VCRUNTIME140.dll丢失.
这是有道理的...因为该程序是用C++编译的,所以它需要Visual C++ 2015 Redistributable包,它尚未安装在客户机上.我想让它尽可能轻松,所以我希望我可以将VC++ 2015 Redist与我的ClickOnce应用程序捆绑在一起.在项目属性>发布选项卡下,有一个前提条件按钮,它允许我指定应用程序应该捆绑可再发行组件包.
这在理论上听起来很棒,但它不起作用.现在,当我尝试在客户端计算机上安装ClickOnce应用程序时,它不起作用.安装失败并指向一个日志文件,其中包含以下相关信息:
'Visual C++"14"运行时库(x86)'RunCheck结果:需要安装
安装组件的Visual C++"14"运行时库(x86)'已被接受.
将文件复制到临时目录"C:\ Users\Owner\AppData\Local\Temp\VSD3872.tmp \"
将文件下载到"C:\ Users\Owner\AppData\Local\Temp\VSD3872.tmp \"
(8/4/2016 12:57:48 PM)将'vcredist_x86\vcredist_x86.exe'从' http://go.microsoft.com/fwlink/?LinkID=800028&clcid=0x409 '下载到'C:\ Users\Owner \应用程序数据\本地的\ Temp\VSD3872.tmp \"
下载完成于2016年8月4日12:57:49 PM
下载失败,HRESULT = -2146697208
这消息使得它很清楚是什么问题:链接,它正试图使用下载的REDIST包已经死了.只有...我不知道怎么能告诉它找到正确的链接.我很惊讶它无法自动找到它,因为这似乎是Visual Studio的一个错误.一些搜索显示正确的链接实际上是这个,但这不是ClickOnce正在解决的.我还看到通过选中框,这是我的csproj文件的相应XML更新:
<BootstrapperPackage Include="Microsoft.Visual.C++.14.0.x86">
<Visible>False</Visible>
<ProductName>Visual C++ "14" Runtime Libraries %28x86%29</ProductName>
<Install>true</Install>
</BootstrapperPackage>
Run Code Online (Sandbox Code Playgroud)
我可以使用一些XML标记来明确指定位置吗?或者我怎么能解决这个问题?如何在不破坏我的应用程序的情况下捆绑可再发行组件?
我需要编写一个 Bash 脚本(最好是单行脚本)来查找当前目录下的所有子目录.tf
,其中包含具有特定文件扩展名的任何文件,即. 棘手的部分是一个文件夹中可能有多个.tf
文件,而我需要文件夹-而不是文件名。
例如,假设我的目录内容如下所示:
\n\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 docs\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 diagram.png\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 project\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 Makefile\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 terraform\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 environments\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 prod\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 staging\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 main.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 module\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ecs.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 rds.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 s3.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 security_group.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 sqs.tf\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 variable.tf\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 tests\n|\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 test_main.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 .terraform\n \xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 ignore_me.tf\n
Run Code Online (Sandbox Code Playgroud)\n\n在这种情况下,我希望命令返回terraform/module
, terraform/environments/prod
, 和terraform/environments/staging
。我还需要一种方法来过滤掉某些永远不应该包含的目录。在上面的示例中请注意,我没有包含点文件目录.terraform
。
我已经知道如何编写以下 find 命令,它可以找到文件.tf
本身: …
我使用 Spark 将多个 parquet 文件读取到单个 RDD 中,并使用标准通配符路径约定。换句话说,我正在做这样的事情:
val myRdd = spark.read.parquet("s3://my-bucket/my-folder/**/*.parquet")
Run Code Online (Sandbox Code Playgroud)
然而,有时这些 Parquet 文件会有不同的架构。当我对 RDD 进行转换时,我可以通过查找某些列是否存在(或不存在)来尝试在映射函数中区分它们。然而,要知道 RDD 中给定行使用哪个模式(以及我在这里具体询问的方式),一个可靠的方法是知道我正在查看哪个文件路径。
在 RDD 级别上,有什么方法可以判断当前行来自哪个特定的 parquet 文件吗?所以想象一下我的代码目前看起来像这样(这是一个简化的示例):
val mapFunction = new MapFunction[Row, (String, Row)] {
override def call(row: Row): (String, Row) = myJob.transform(row)
}
val pairRdd = myRdd.map(mapFunction, encoder=kryo[(String, Row)]
Run Code Online (Sandbox Code Playgroud)
在myJob.transform( )
代码中,我用其他值装饰结果,将其转换为一对 RDD,并执行一些其他转换。
我使用该row.getAs( ... )
方法来查找特定的列值,这是一个非常有用的方法。我想知道是否有任何类似的方法(例如row.getInputFile( )
或类似的方法)来获取我当前正在操作的特定文件的名称?
由于我传递通配符以将多个镶木地板文件读取到单个 RDD 中,因此我不知道我正在操作哪个文件。如果没有别的事,我希望有一种方法可以用输入文件名来装饰 RDD 行。这可能吗?
c# ×2
py2exe ×2
python ×2
wxpython ×2
.net ×1
apache-spark ×1
bash ×1
c++ ×1
clickonce ×1
console ×1
cross-domain ×1
docker ×1
flash ×1
html5 ×1
html5-canvas ×1
javascript ×1
logging ×1
parquet ×1
pdo ×1
php ×1
scala ×1
sql ×1
sql-server ×1
urlloader ×1
urlrequest ×1
vcredist ×1
wpf ×1