我有一个程序(服务器),我正在寻找一种方法(脚本),它将所有stdout文件重定向(或更好地复制)并为每个条目添加时间戳.
我已经完成了一些研究,我能得到的最远的就是如何将时间戳添加到STDERR重定向.它重定向stdout但添加的时间戳是脚本完成的时间:
#!/bin/bash
./server | ./predate.sh > log.txt
Run Code Online (Sandbox Code Playgroud)
代码predate.sh:
#!/bin/bash
while read line ; do
echo "$(date): ${line}"
done
Run Code Online (Sandbox Code Playgroud)
似乎退出程序后刷新服务器输出.(没有重定向它工作正常).此外,如果我尝试predate.sh在提到的线程中使用给定的示例,它可以完美地工作.我知道在主程序中添加时间戳很容易,但我宁愿避免编辑它的代码.
如何从单个对象创建Stream?这种基本操作在流API中显示出问题.为了说明,我想有意义地完成以下方法
private Node parent;
private List<Node> children;
public Stream<Node> getFilteredNodes(Options o) {
if(o.findParent()/*special case*/) return /*??? stream containing just parent*/;
return children.stream().filter(x -> x.getName().equals(o.getQuery()));
}
Run Code Online (Sandbox Code Playgroud)
换句话说,我想要LINQ这样的东西return Enumerable.Repeat(parent,1);.即使存储parent在具有单个项目的列表中也会起作用,但它也会使其他逻辑复杂化,因此我更倾向于使用内置方法.
至于我需要它 - 搜索API的一致性,所以我可以在相同的方法调用中上下搜索层次结构(并将两者结合起来),将它传递给下一阶段.
我正面临着GUI设计中的OOP问题,但让我用动物示例来说明它.让我们有以下设置:
动物有一个牙齿是很自然的,但是现在我需要像接触这样的关系.例如,如果我有一个动物矢量,如果可以的话我怎么能做每个Bite()?
std::vector<Animal *> animals;
animals.push_back(new dog());
animals.push_back(new fly());
animals.push_back(new cat());
void Unleash_the_hounds(std::vector<Animal *> animals)
{
//bite if you can!
}
Run Code Online (Sandbox Code Playgroud)
我想出了几个解决方案,但似乎没有一个完全适合:
1.)每个使用Teeth的类都实现了接口IBiting.但是,这个解决方案引入了大量的代码重复,我需要在每个类中"实现"Bite():
class Cat : public Animal, public IBiting {
Teeth teeth;
public:
virtual void Bite() { teeth.Bite(); }
}
Run Code Online (Sandbox Code Playgroud)
2.)给每一只动物的牙齿,但只允许一些人使用它们.注意:语法可能是错误的 - 它只是说明
class Animal{
static cosnt bool canBite = false;
Teeth teeth;
public:
void Bite() { this->canBite ? teeth.Bite() : return; }
}
class Cat {
static …Run Code Online (Sandbox Code Playgroud) 我有一个整数和一个非负权重列表,如何将整数“拆分”为相同数量的具有相应权重的“桶”?
public int[] SplitIntoBuckets(int count, int[] weights) {
// some magic algorithm
Debug.Assert(solution.Sum() == count);
return solution;
}
Run Code Online (Sandbox Code Playgroud)
一个简单的例子是count = 200和weights = { 25, 25, 50 }的解{50, 50, 100}(50+50+100 = 200)。然而,输入不一定是“好的”数字,没有好的解决方案的另一个例子是count = 150和 权重{753, 42, 95, 501}。
桶的总和必须始终等于输入count,算法应将输入尽可能接近权重地分布在桶之间。什么“尽可能接近”并不重要(例如,它可以是最低的绝对误差、相对误差或平方误差)。
我能找到的最接近的问题是“均匀地分成桶”,但是我的桶不是“均匀的”,并且“随机分成桶”,但权重是随机选择的“好”数字。
这可能是一个有点愚蠢的问题 - 我应该delete在程序结束时调用巨大的地图/集合吗?
假设整个程序都需要map/set(delete返回前的最后一行),它的大小非常大(> 4GB).这个delete电话花了很长时间,从我的角度来看没有任何价值(内存不能早点发布),我错了吗?如果是这样,为什么?
如何在字符串执行中使用输出参数?考虑使用“标准”语法进行以下查询:
DECLARE @testString nvarchar(50);
EXEC testProcedure @param1 = @testString OUTPUT
SELECT 'result ' = @testString
go
Run Code Online (Sandbox Code Playgroud)
如何使用字符串exec重新创建完全相同的结果,既不
EXEC ( 'testProcedure @param1 = @testString OUTPUT' )
Run Code Online (Sandbox Code Playgroud)
也不
EXEC ( 'testProcedure @param1 = ' + @testString + ' OUTPUT' )
Run Code Online (Sandbox Code Playgroud)
似乎有效:结果是NULL或Must declare the scalar variable "@testString"错误。
我怎样才能覆盖一个内容ZipArchiveEntry?使用下面的代码StreamWriter使用StringBuilder,如果新的文件内容比原来的短,例如失败:
using System.IO.Compression;
//...
using (var archive = ZipFile.Open("Test.zip", ZipArchiveMode.Update))
{
StringBuilder document;
var entry = archive.GetEntry("foo.txt");//entry contents "foobar123"
using (StreamReader reader = new StreamReader(entry.Open()))
{
document = new StringBuilder(reader.ReadToEnd());
}
document.Replace("foobar", "baz"); //builder contents "baz123"
using (StreamWriter writer = new StreamWriter(entry.Open()))
{
writer.Write(document); //entry contents "baz123123", expected "baz123"
}
}
Run Code Online (Sandbox Code Playgroud)
生成包含新旧内容的文件混合"baz123123"而不是预期的"baz123".ZipArchiveEntry在编写新内容之前,是否有一种方法可以丢弃旧内容?
注意:我不想解压缩文件,我想更改存档的内容.
首先,对于另一个“为什么我的异步操作挂起”问题感到抱歉,但我相信这个问题已经足够不同了。
调查了几十个类似的问题,异步操作死锁的问题要么是把自己锁在外面(.Result),使用有限的资源,要么错误地使用库组件(网络请求似乎很流行)。在以下示例中,我找不到上面的任何内容:
private async Task ExecuteAsync(Task<int> task)
{
// entering on current thread, that is the main UI thread
await task // execute "task" asynchronnously (on a different thread)
.ConfigureAwait(false); // when done, no need to return to main thread
MessageBox.Show("success"); // succes indicator
}
public MainWindow() //wpf window ctor
{
InitializeComponent();
this.Loaded += MainWindow_Loaded;
}
private void MainWindow_Loaded(object sender, RoutedEventArgs e)
{
var task = new Task<int>(() => 42); // make an Action wrapping sychronnous …Run Code Online (Sandbox Code Playgroud) c# ×3
c++ ×2
algorithm ×1
async-await ×1
bash ×1
deadlock ×1
double ×1
exec ×1
integer ×1
java ×1
java-stream ×1
linux ×1
oop ×1
redirect ×1
sql ×1
sql-server ×1
streamwriter ×1
t-sql ×1
zip ×1