小编Men*_*hak的帖子

将stdout捕获到变量但仍在控制台中显示它

我有一个bash脚本调用几个长时间运行的进程.我想根据处理原因将这些调用的输出捕获到变量中.但是,因为这些是长时间运行的进程,所以我希望rsync调用的输出实时显示在控制台中,而不是事后.

为此,我找到了一种方法,但它依赖于将文本输出到/ dev/stderr.我觉得输出到/ dev/stderr并不是一种好的做事方式.

VAR1=$(for i in {1..5}; do sleep 1; echo $i; done | tee /dev/stderr)

VAR2=$(rsync -r -t --out-format='%n%L' --delete -s /path/source1/ /path/target1 | tee /dev/stderr)

VAR3=$(rsync -r -t --out-format='%n%L' --delete -s /path/source2/ /path/target2 | tee /dev/stderr)
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我调用rsync几次,我想看到文件名在处理时,但最后我还是想在变量中输出,因为我稍后会解析它.

是否有一种"更清洁"的方式来实现这一目标?

如果它有所作为,我使用的是Ubuntu 12.04,bash 4.2.24.

bash ubuntu tee process-substitution

66
推荐指数
5
解决办法
3万
查看次数

如何为Gradle任务指定类别?

我正在Intellij IDEA写一个Gradle任务.我注意到在Gradle窗口中,任务显示在文件夹下,如下所示:

在此输入图像描述

我想知道,你怎么能给任务一个'类别',使它出现在截图中所示的文件夹中?

我创建的所有任务通常都会结束other.我也在编写一个自定义插件,并希望它显示在我选择的"文件夹"名称下.但我认为在编写任务时它将是相同的答案.

groovy intellij-idea gradle

29
推荐指数
5
解决办法
6773
查看次数

在测试AngularJS控制器时,如何在$ http.get承诺中模拟结果?

经过多次阅读后,似乎从AngularJS控制器调用Web服务的推荐方法是使用工厂并从中返回一个promise.

这里我有一个简单的工厂,它调用一个示例API.

myApp.factory('MyFactory', ['$http',function($http) {
var people = {
        requestPeople: function(x) {
            var url = 'js/test.json';
            return $http.get(url);
        }
    };
return people;
}]);
Run Code Online (Sandbox Code Playgroud)

这就是我在控制器中调用它的方式

myApp.controller('MyCtrl1', ['$scope', 'MyFactory', function ($scope, MyFactory) {
        MyFactory.requestPeople(22).then(function(result) {
             $scope.peopleList = result;
        });
}]);
Run Code Online (Sandbox Code Playgroud)

虽然它工作正常,但我希望能够模拟在调用result时传入的then内容.这可能吗?

到目前为止,我的尝试没有产生任 这是我的尝试:

//Fake service
var mockService = {
    requestPeople: function () {
        return {
            then: function () {
                return {"one":"three"};
            }
        }

    }
};


//Some setup
beforeEach(module('myApp.controllers'));
var ctrl, scope;

beforeEach(inject(function ($rootScope, $controller) {
    scope = $rootScope.$new(); …
Run Code Online (Sandbox Code Playgroud)

javascript unit-testing mocking jasmine angularjs

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

如何从具有不同参数的单个端点获得多个响应?

我们正在考虑使用API​​蓝图.在某些情况下,我们希望一个请求返回正确的响应,另一个请求返回"错误"响应,例如,400 bad request以便其他开发人员可以在apiary.io上使用两种类型的响应来处理模拟API并处理它他们的应用.

我在下面创建了一个完全随意的例子,

## Thing [/thing/{id}]
Gets a thing but the thing id must be a prime number!


+ Parameters
    + id (string) ... ID of the thing, a prime number!

+ Model (application/json)

    The thing itself.

    + Body

            {
                "description": "It is green"
            }

### Retrieve a Single Gist [GET]
+ Response 200

    [Gist][]
Run Code Online (Sandbox Code Playgroud)

现在我想以某种方式添加回复 /thing/40

+ Response 400
    {  "error" : "Invalid request" }
Run Code Online (Sandbox Code Playgroud)

但我不确定如何使用API​​ Blueprint执行此操作.这可以在apiary.io的"旧"风格下实现,但我们想继续使用新的语法

apiary.io apiblueprint

22
推荐指数
1
解决办法
7372
查看次数

使用Gradle,如何确保某个位置存在文件?

我开始将Gradle用于Android应用程序.如果开发人员无法在特定位置创建文件,我希望构建失败./src/res/values/specialfile.xml

一点点搜索让我相信一个.doFirst会工作

android.doFirst { 
    assert file("./src/res/values/specialfile.txt").exists() 
} 
Run Code Online (Sandbox Code Playgroud)

但是,Gradle说 "找不到支持的Gradle DSL方法:'doFirst()'!"

我该怎么做才能断言文件的存在?

android intellij-idea gradle

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

EventBus vs Callbacks,什么时候使用?

我有许多活动可以提高后台工作; 活动将在实现侦听器回调时自行传递,以便后台任务可以在活动上引发事件.反过来,活动可以在UI上显示某些内容,以指示后台活动已通过或失败.

或者,我可以使用EventBus,其中我将Activity注册为侦听器/订阅者.我可以让后台任务在EventBus上引发一个事件,而侦听它的Activity可以处理它.

一个优于另一个的优点是什么?你什么时候用一个而不是另一个?(代码清洁度?性能?警告?)


跟进 - 我最终使用了EventBus.代码肯定是更清洁,没有回调挂在任何地方.IDE(IntelliJ)认为onEvent方法未使用,因此我创建了一个注释

@Target({ElementType.METHOD})
public @interface EventBusHook {}
Run Code Online (Sandbox Code Playgroud)

并把它放在我的onEvent方法上.然后Alt +单击它并要求IntelliJ不将其视为未使用.

@EventBusHook
public void onEvent(MyEventType myEventType){
Run Code Online (Sandbox Code Playgroud)

android callback event-bus

21
推荐指数
2
解决办法
7512
查看次数

Google API的Android授权令牌类别别名列表在哪里?

在按照教程使用OAuth 2和Android AccountManager时,我被告知在指定AUTH_TOKEN_TYPE时,而不是像这样指定范围:

String AUTH_TOKEN_TYPE = "oauth2:https://www.googleapis.com/auth/tasks";
Run Code Online (Sandbox Code Playgroud)

你可以使用它的别名:

String AUTH_TOKEN_TYPE = "Manage your tasks";
Run Code Online (Sandbox Code Playgroud)

这允许用户理解权限是什么而不是给予URL.我想弄清楚Google Documents List API的别名是什么.

然后,该文档指向一个auth令牌别名列表,但遗憾的是该列表不存在.还有一个相关的Youtube视频,其中开发人员提到了Google Buzz别名,并且还提到将在某个时刻设置别名列表.

我可以使用什么代替Google文档范围?

String AUTH_TOKEN_TYPE = "oauth2:https://docs.google.com/feeds/"
Run Code Online (Sandbox Code Playgroud)

android alias google-api accountmanager oauth-2.0

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

在尝试使用GSettings架构之前,如何确定它是否存在?

如果GSettings模式存在且已编译,则从中读取通常没有问题.但是,如果它不存在,通常会抛出一个无法处理的错误.在Python文件或控制台中尝试:

from gi.repository import Gio
try:
    settings = Gio.Settings("com.example.doesnotexist")
except:
    print "Couldn't load those settings!"
Run Code Online (Sandbox Code Playgroud)

我正在尽可能广泛地使用except,但这是抛出的错误.

(进程:10248):GLib-GIO-ERROR**:未安装设置架构'com.example.doesnotexist'

我基本上想要做的是找出com.example.doesnotexist架构是否存在; 如果没有,那么告诉用户在使用我的应用程序之前运行我的安装脚本.关于这样做的任何其他建议都是受欢迎的.

python pygobject gio

8
推荐指数
1
解决办法
1190
查看次数

上传文件时,Google文档API会返回503服务不可用.有什么变化?

我的应用程序使用了Google Docs API.直到最近,使用HTTP端点的上传工作正常.最近,上传突然开始出错.第一次创建会话(返回可恢复的URL)的调用工作正常,并返回一个可恢复的URL.然后尝试将文件内容发送到可恢复的URL会引发503.

抛出错误的代码的相关部分是这样的:

        URL url = new URL(resumableFileUploadUrl);
        conn = (HttpURLConnection) url.openConnection();
        conn.addRequestProperty("client_id", OAuth2Client.CLIENT_ID);
        conn.addRequestProperty("client_secret", OAuth2Client.CLIENT_SECRET);
        conn.setRequestProperty("Authorization", "OAuth " + GetAuthToken());

        conn.setRequestProperty("X-Upload-Content-Length", String.valueOf(fileContents.length())); //back to 0
        conn.setRequestProperty("X-Upload-Content-Type", "text/xml");
        conn.setRequestProperty("Content-Type", "text/xml");
        conn.setRequestProperty("Content-Length", String.valueOf(fileContents.length()));
        conn.setRequestProperty("Slug", fileName);

        if(isUpdate)
        {
            conn.setRequestProperty("If-Match", "*");
            conn.setRequestMethod("PUT");
        }
        else
        {
            conn.setRequestMethod("POST");
        }

        conn.setRequestProperty("GData-Version", "3.0");
        conn.setRequestProperty("User-Agent", "GPSLogger for Android");


        conn.setUseCaches(false);
        conn.setDoInput(true);
        conn.setDoOutput(true);

        DataOutputStream wr = new DataOutputStream(
                conn.getOutputStream());
        wr.writeBytes(fileContents);
        wr.flush();
        wr.close();

        int code = conn.getResponseCode();
        newLocation = conn.getHeaderField("location");
Run Code Online (Sandbox Code Playgroud)

上述代码既用于创建会话以获取可恢复的URL,也将文件内容发布到可恢复的URL.

这是一部分这个 Android的活动.我包含了原始活动的链接,因为通过简单地克隆存储库可能很容易重现问题.该守则一直保持不变.

最近有什么改变会导致这种情况吗?

我想避免现在使用Google Drive的API,因为我没有更改任何代码,并且在该领域的一些其他应用程序中使用了相同的代码.

java android google-docs-api

6
推荐指数
1
解决办法
887
查看次数

有没有办法只在Android Gradle项目中运行一组特定的测试?

我有一个Android/Gradle项目.每当我想运行测试时,我运行:

./gradlew connectedInstrumentTest
Run Code Online (Sandbox Code Playgroud)

它在我的项目的测试文件夹下运行我的所有测试.

我的测试文件夹有几个自动化测试以及非自动化测试.我最感兴趣的是在没有慢速自动化测试的情况下运行快速非自动化测试.

有没有办法只运行一组特定的测试,例如从一个特定的类或类似的东西?我基本上都在询问任何类型的分离,以便我可以选择在我想要的时候运行一些测试.


在这里创建了一个示例项目.

编辑local.properties以指向您的Android SDK.

接下来,启动模拟器或将手机连接到计算机.然后你可以使用运行测试./gradlew connectedInstrumentTest --info.这将运行所有测试.

我无法弄清楚的是如何只在一个类而不是所有测试中运行测试.

android gradle travis-ci android-gradle-plugin

6
推荐指数
1
解决办法
3769
查看次数